Objective-C中的深拷贝与浅拷贝问题

深拷贝:深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。
浅拷贝:浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间,对其中任何一个指针所指向的对象进行修改,那么两个指针指向内容都会改变。

Objective-C中的深拷贝与浅拷贝问题

在OC当中,“祖宗类”定义有copy\mutablecopy两种拷贝方式。
对于copy而言,如果对象是可变对象则为深拷贝,此时新产生的对象的引用计数为1。如果对象是不可变对象则为浅拷贝,那么对象的引用计数加1。
对于mutableCopy而言,始终是深拷贝,新产生的对象的引用计数为1。

上面我们提到了可变对象不可变对象两种,那么在OC当中,哪些是可变对象,那些是不可变对象?

NSString,NSArray,NSDictionary等这种我们一旦创建就不可以更改的对象都是不可变对象。
对应的,NSMutableString,NSMutableArray,NSMutableDictionary等可以对其元素进行改变的对象为可变对象。