深复制产生新对象,浅复制不产生。
只有不可变对象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);
复制代码 |