1、使用copy或mutableCopy方法能夠建立一個對象的副本。指針
copy:對象
(1)須要實現NSCoppying協議it
(2)建立的是不可變副本(如NSString、NSArray、NSDictionary)io
mutableCopy:table
(1)須要先實現NSMutableCopying協議class
(2)建立的是可變副本(如NSMutableString、NSMutableArray、NSMutableDictionary)引用
【備註】Copy的目的是創建副本,同時修改原始對象和複本不會互相干擾方法
2、深複製 & 潛複製協議
深複製:tab
(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;
}