1、使用copy或mutablecopy方法可以建立一個對象的副本。
copy:
(1)需要實作nscoppying協定
(2)建立的是不可變副本(如nsstring、nsarray、nsdictionary)
mutablecopy:
(1)需要先實作nsmutablecopying協定
(2)建立的是可變副本(如nsmutablestring、nsmutablearray、nsmutabledictionary)
【備注】copy的目的是建立副本,同時修改原始對象和複本不會互相幹擾
2、深複制 & 潛複制
深複制:
(1)内容拷貝,源對象和副本指向的是不同的兩個對象
(2)源對象引用計數器不變,副本計數器設定為1
淺複制:
(1)指針拷貝,源對象和副本指向的是同一個對象
(2)對象的引用計數器+1,其實相當于做了一次retain操作
【備注】隻有不可變對象建立不可變副本(copy)才是淺複制,其他都是深複制
3、自定義對象的copywithzone
- (id)copywithzone:(nszone *)zone
{
person *p = [[[self class] allocwithzone:zone] init];
p.name = self.name;
p.age = self.age;
return p;
}