黑马程序员技术交流社区
标题:
关于深复制、浅复制的问题
[打印本页]
作者:
木子小静
时间:
2014-12-25 21:11
标题:
关于深复制、浅复制的问题
创建一个NSDictionary对象,随便往里面添加内容,然后通过代码产
生可变和不可变副本,这些复制是深复制还是浅复制?这个怎么写啊?
作者:
从今以后
时间:
2014-12-25 21:48
深复制产生新对象,浅复制不产生。
只有不可变对象copy时才是浅复制,其他三种都是深复制。
这里深浅复制针对字典本身,里面的对象其实还是浅复制。
// 不可变字典
NSDictionary *dict = @{@"a" : @1, @"b" : @2, @"c" : @3};
// 不可变的copy 浅复制 不产生新对象 指向同一对象 原对象引用计数器+1
NSDictionary *copy = [dict copy];
NSLog(@"dict引用计数:%lu, dict地址:%p", [dict retainCount], dict);
NSLog(@"copy引用计数:%lu, dict地址:%p", [copy retainCount], copy);
// 不可变的mutableCopy 深复制 产生新对象 原对象引用计数器不变 新的为1
NSMutableDictionary *mutable = [dict mutableCopy];
NSLog(@"dict 引用计数:%lu, dict 地址:%p", [dict retainCount], dict);
NSLog(@"mutable引用计数:%lu, mutable地址:%p", [mutable retainCount], mutable);
// 可变的copy 同上
NSDictionary *copy2 = [mutable copy];
NSLog(@"mutable引用计数:%lu, mutable地址:%p", [mutable retainCount], mutable);
NSLog(@"copy2 引用计数:%lu, copy2 地址:%p", [copy2 retainCount], copy2);
// 可变的mutableCopy 同上
NSMutableDictionary *mutable2 = [mutable mutableCopy];
NSLog(@"mutable 引用计数:%lu, mutable 地址:%p", [mutable retainCount], mutable);
NSLog(@"mutable2引用计数:%lu, mutable2地址:%p", [mutable2 retainCount], mutable2);
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2