面试

Swift和OC数组的区别

2016-12-14  本文已影响0人  PKL

场景:一个数组(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里各种碰壁。

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

上一篇下一篇

猜你喜欢

热点阅读