关于深copy和浅copy

2019-11-28  本文已影响0人  张_何

深copy

浅copy

集合的单层深copy

自定义对象的copy

-(id)copyWithZone:(NSZone *)zone {
//    浅copy
    return self;
}
-(id)copyWithZone:(NSZone *)zone {
//    深copy
    SomeClass *copy = [[self class] allocWithZone:zone];
// 对属性进行copy
    copy.*** = self.***;
    return copy;
}      
image.png

当我们使用copy声明属性的时候,如果没有实现copyWithZone方法会崩溃,图中14行会崩溃,
当我们对集合进行深copy的时候,同样集合里的元素类型也要实现copyWithZone方法,否则同样会崩溃,图中46 行会崩溃,此时对copyWithZone方法里面的实现没有要求,既可以是浅copy的实现,也可以是深copy的实现,但是既然是要深copy集合,最好实现深copy
当我们修改Person类的copyWithZone的实现改为浅copy,此时p1 的retainCount 会变为4, p2的retainCount 会变为3

2019-11-28 17:30:18.516735+0800 ObjcCode[89781:16260783] p1 retainCount 4
2019-11-28 17:30:18.516935+0800 ObjcCode[89781:16260783] p2 retainCount 3
上一篇下一篇

猜你喜欢

热点阅读