A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cogddo 中级黑马   /  2015-5-14 10:25  /  1151 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如何将NSDictionary里面内容通过代码产生可变和不可变副本??求大神告知。

2 个回复

倒序浏览
简单的来说 不可变就是只复制指向对象的指针,可变就是复制源对象;
NSDictionary *dic1 = @{ @"k1":@"v1"};
// 通过copy 来复制 这一种是浅复制, 形象的比喻下 ,浅复制就是 :人跟影子的关系 , 你没啦,影子也就没有啦。
NSDictionary *dic2 = [dic1 copy];
//这种就是深复制 形象的比喻就是 : 把人克隆出来一个,你没啦,克隆人还在。
NSDictionary *dic3 = [dic 1 mutablecopy];
浅复制的定义是:指针拷贝,源文件和新文件指向的是同一个地址,也就是说浅拷贝要复制出来一个新的文件,但两个文件的地址还是一个。浅拷贝的话是只有不可变数组(如:NSArray,NSSet,NS字典)遇上copy,才是浅拷贝,剩下的都是深拷贝。
   
    深复制的定义是:内容复制,也就是还是要复制出来一个新的对象,但新对象和原来对象的地址是两个完全没有关系的地址。改变新对象,旧对象就不会改变。改变旧对象新对象就不会改变


回复 使用道具 举报
那就是 copy出来都是不可变的,,深拷贝还是前拷贝,要看对象类型(或者数据类型)
mutableCopy出来都是可变的,,深拷贝还是前拷贝,要看对象类型(或者数据类型)。是这样的理解吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马