一、浅拷贝和深拷贝的区别
浅拷贝就是指针拷贝,即不同的变量指向同一个对象,对象的地址是一样的。
深拷贝就是既拷贝对象的地址(在内存中重新分配一块内存,来存放内容)又拷贝对象的内容.
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 想要的结果)
四、结果验证



推荐推荐一篇博客 写的很好 讲解的很透彻形象
http://blog.csdn.net/jaywon/article/details/8772232
网友评论