网上的资料已经一大堆,本文就简单的总结一下。
首先,一个NSObject的对象想要使用这两个函数,那么必须实现NSCopying协议和NSMutableCopying协议。
对于NSCopying,实现+ copyWithZone:方法。
对于NSMutableCopying,实现+ mutableCopyWithZone:方法。
经常用的NSString,NSArray,NSDictionary等已经实现。
总结:
如果对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制(深拷贝)。
如果是对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的。
网上解释浅复制就是复制了对象的指针,深复制就是复制对象的地址。也就是说浅复制出来的对象,修改完之后会影响原来的对象,深复制则不会。这里存在一个问题就是怎么测试的问题,因为浅复制出来的对象是不可变的,要怎么修改目前没找到办法,有大神知道的话求告知。
附上大佬链接