黑马程序员技术交流社区

标题: 关于深复制、浅复制的问题 [打印本页]

作者: 木子小静    时间: 2014-12-25 21:11
标题: 关于深复制、浅复制的问题
创建一个NSDictionary对象,随便往里面添加内容,然后通过代码产

生可变和不可变副本,这些复制是深复制还是浅复制?这个怎么写啊?
作者: 从今以后    时间: 2014-12-25 21:48
深复制产生新对象,浅复制不产生。
只有不可变对象copy时才是浅复制,其他三种都是深复制。
这里深浅复制针对字典本身,里面的对象其实还是浅复制。
  1. // 不可变字典
  2.     NSDictionary *dict = @{@"a" : @1, @"b" : @2, @"c" : @3};
  3.    
  4.     // 不可变的copy 浅复制 不产生新对象 指向同一对象 原对象引用计数器+1
  5.     NSDictionary *copy = [dict copy];
  6.     NSLog(@"dict引用计数:%lu, dict地址:%p", [dict retainCount], dict);
  7.     NSLog(@"copy引用计数:%lu, dict地址:%p", [copy retainCount], copy);
  8.    
  9.     // 不可变的mutableCopy 深复制 产生新对象 原对象引用计数器不变 新的为1
  10.     NSMutableDictionary *mutable = [dict mutableCopy];
  11.     NSLog(@"dict   引用计数:%lu, dict   地址:%p", [dict retainCount], dict);
  12.     NSLog(@"mutable引用计数:%lu, mutable地址:%p", [mutable retainCount], mutable);
  13.    
  14.     // 可变的copy  同上
  15.     NSDictionary *copy2 = [mutable copy];
  16.     NSLog(@"mutable引用计数:%lu, mutable地址:%p", [mutable retainCount], mutable);
  17.     NSLog(@"copy2  引用计数:%lu, copy2  地址:%p", [copy2 retainCount], copy2);
  18.    
  19.     // 可变的mutableCopy 同上
  20.     NSMutableDictionary *mutable2 = [mutable mutableCopy];
  21.     NSLog(@"mutable 引用计数:%lu, mutable 地址:%p", [mutable retainCount], mutable);
  22.     NSLog(@"mutable2引用计数:%lu, mutable2地址:%p", [mutable2 retainCount], mutable2);
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2