不完全深拷贝要实现完全深拷贝


需求:默认状态下深拷贝指的是不完全深拷贝, 如要实现完全深拷贝, 则要重写copyWithZone: 方法, 自行实现完全深拷贝的
实现:大体思路如下, 在copyWithZone: 里对象赋值上不直接赋值而是通过copy方法即可实现


// Person.m
- (id)copyWithZone:(NSZone *)zone
{
    Person *cpyPerson = [[Person allocWithZone:zone] init];
    cpyPerson.name = self.name;
    cpyPerson.age = self.age;
    return cpyPerson;
}
// NSArray
- (id)copy
{
    NSArray *cpyArray = [[NSArray alloc] initWithArray:self copyItems:YES];
    return cpyArray;
}
// main.m
Person *p1 = [[Person alloc] init];
Person *p2 = [[Person alloc] init];
NSArray *array = @[p1, p2];
NSArray *cpyArray = [array copy];
NSLog(@"%@ - %@", array, cpyArray);
// 输出结果
(
    "<Person: 0x100204af0>",
    "<Person: 0x100206b20>"
) - (
    "<Person: 0x100207910>",
    "<Person: 0x1002074d0>"
)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容