美文网首页面试
Swift和OC数组的区别

Swift和OC数组的区别

作者: PKL | 来源:发表于2016-12-14 16:03 被阅读0次

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

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

    相关文章

      网友评论

        本文标题:Swift和OC数组的区别

        本文链接:https://www.haomeiwen.com/subject/ydyxuttx.html