黑马程序员技术交流社区

标题: copy 和mutableCopy [打印本页]

作者: whymerain    时间: 2015-3-23 12:43
标题: copy 和mutableCopy
已有NSDictionary *dict = @{@"name" : @"jack"},下面哪个个字典是可变的:


A                    NSDictionary *dictCopy = [dict copy]
B                    NSDictionary *dicCopyt = [dict mutableCopy]
C                    NSMutableDictionary *dictCopy = [dict copy]
D                   NSMutableDictionary *dictCopy = [dict mutableCopy]


作者: chock江    时间: 2015-3-23 13:31
选择d选项吧,貌似视频里没有讲到 深拷贝和浅拷贝
作者: xiezhongmin    时间: 2015-3-23 13:34
B和D。               
作者: whymerain    时间: 2015-3-23 17:52
chock江 发表于 2015-3-23 13:31
选择d选项吧,貌似视频里没有讲到 深拷贝和浅拷贝

我试了CD都可加东西,难道和方法无关,跟类型有关?
作者: xiezhongmin    时间: 2015-3-23 18:09
whymerain 发表于 2015-3-23 17:52
我试了CD都可加东西,难道和方法无关,跟类型有关?

b可以加东西,cs 绝对不能加的  A是浅拷贝 ,其它都是深拷贝,b和d拷贝出来的才是可变副本,麻烦你们不要忽悠别人
作者: 粘糊浆    时间: 2015-3-23 19:59
666.......
作者: marswawa    时间: 2015-3-23 22:14
本帖最后由 marswawa 于 2015-3-24 15:49 编辑

一个个都不耐心呢?我好好给大家说下什么是深复制什么是浅复制,首先浅复制的本质是指针的复制,比如说A指针变量存储的内存地址是af21,那么A变量把内存地址复制给B变量,B指针变量相当拿到了和A一样的内存地址,并且指向了A指针所指向的对象。完全是内存地址的传递。被指向的对象只不过被别人多一次引用而已。
深复制本质是变量内容的传递,拿字符串来说,s1和s2,s2拿到s1的字符串值,并且开辟新的内存空间,创造了一个和s1内容完全一样的对象,但是他们的内存地址不一样,这叫深复制。
鄙人愚见,不见得正确,烦请大神批评指正。

答案为BD,技术mutablecopy返回的永远是可变对象,B选项只是一个多态而已,本质也是可变对象。

作者: marswawa    时间: 2015-3-23 22:28
本帖最后由 marswawa 于 2015-3-23 22:52 编辑

我了解的不是很透彻,不说了。
作者: whymerain    时间: 2015-3-23 22:34
marswawa 发表于 2015-3-23 22:28
A                    NSDictionary *dictCopy = [dict copy]
B                    NSDictionary *dicCopy ...

你的意思是创造的一个不可变字典放到可变字典类型中,形成的一个新的字典,这个新字典中不可变字典部分依旧不可变,其余部分可以变?




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