Swift和OC数组的区别

场景:一个数组(bigArray)里包含几个小数组(smallArray),小数组里的数据分别是tableView要展示的不同数据。

那么问题来了,在OC里,用过NSMutableArray *smalllArray = bigArray[0],取出的smallArray,此时对smallArray进行元素处理(删除,添加),bigArray[0]一样改变。

在Swift则不然,smallArray进行操作,bigArray[0]不会改变。

遇到类似的问题,最好的方法就是把数组的内存地址:打印之。

OC很简单,打印的结果也如我所料,smallArray跟bigArray[0]是一样的内存地址

Swift怎么打印数组的内存地址还没找到 =。= ,打印数组元素的内存方法是

func printAddress(o:T)  {

debugLog(String.init(format: "%018p", unsafeBitCast(o, to: Int.self)))

}

但是这并没有什么卵用 =。=,写在这里只是提醒自己别忘了这个方法,Swift这些API太蛋疼。

最后想到的可能性只有OC和Swift数组的区别了。

果不其然,OC的NSMutableArray 

@interface NSObject{

Class isa  OBJC_ISA_AVAILABILITY;

最根本是Class

Swift的Array 

public struct Array: RandomAccessCollection, MutableCollection

起本质是一个结构体。

其实不仅仅是数组,Swift里很多常用的API都是Struct类型,这就导致了上述场景我在OC里运用的很溜的一个方法,到Swift里各种碰壁。

因为本身也是小菜鸟一枚,所以对于结构体和类的内存地址问题不做深讨,有错误和不足之处忘大神们指教!😆

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容