copy 和 mutableCopy

作者: Qiu_W | 来源:发表于2016-05-18 15:50 被阅读97次

    一、浅拷贝和深拷贝的区别

    浅拷贝就是指针拷贝,即不同的变量指向同一个对象,对象的地址是一样的。

    深拷贝就是既拷贝对象的地址(在内存中重新分配一块内存,来存放内容)又拷贝对象的内容.

    copy返回的对象都是不可变的,mutableCopy返回的对象都是可变的

    二、对于NSString或者NSMutableString来说

    2.1、copy对于NSString来说是浅拷贝 对于NSMutableStringl来说mutableCopy是深拷贝

    2.2、无论是NSString还是NSMutableString,mutableCopy都是深拷贝

    三、对于不可变容器和可变容器来说

    3.1、对于不可变容器,copy是浅拷贝 mutableCopy也是浅拷贝(只拷贝地址,不拷贝内容)

    3.2、对于可变容器,比如NSMutableArray,NSMutableDictionary、NSMutableSet,无论是copy还是mutableCopy都是浅拷贝(只拷贝地址,不拷贝内容)。

    三、对于string为什么不用retain

    retain本质是浅拷贝,引用计数加1即变量指向堆中的同一块内存区域,

    对于不可变NSString,如果用retain,虽然指向了同一块内存区域,但是由于NSString是不可变的,所以外部的变化并不会造成属性也随之变化。

    对于可变的NSMutableString,如果用retain,当外部变量的值发生变化时,属性的值也会随之变化(快哭了这肯定不是我们i 想要的结果)

    四、结果验证

    代码1 代码2 打印

    推荐推荐一篇博客 写的很好 讲解的很透彻形象

    http://blog.csdn.net/jaywon/article/details/8772232

    相关文章

      网友评论

        本文标题:copy 和 mutableCopy

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