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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© whymerain 中级黑马   /  2015-3-23 12:43  /  1778 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

已有NSDictionary *dict = @{@"name" : @"jack"},下面哪个个字典是可变的:


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

8 个回复

倒序浏览
选择d选项吧,貌似视频里没有讲到 深拷贝和浅拷贝
回复 使用道具 举报
B和D。               
回复 使用道具 举报
chock江 发表于 2015-3-23 13:31
选择d选项吧,貌似视频里没有讲到 深拷贝和浅拷贝

我试了CD都可加东西,难道和方法无关,跟类型有关?
回复 使用道具 举报
whymerain 发表于 2015-3-23 17:52
我试了CD都可加东西,难道和方法无关,跟类型有关?

b可以加东西,cs 绝对不能加的  A是浅拷贝 ,其它都是深拷贝,b和d拷贝出来的才是可变副本,麻烦你们不要忽悠别人
回复 使用道具 举报 1 0
666.......
回复 使用道具 举报
本帖最后由 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:52 编辑

我了解的不是很透彻,不说了。
回复 使用道具 举报
marswawa 发表于 2015-3-23 22:28
A                    NSDictionary *dictCopy = [dict copy]
B                    NSDictionary *dicCopy ...

你的意思是创造的一个不可变字典放到可变字典类型中,形成的一个新的字典,这个新字典中不可变字典部分依旧不可变,其余部分可以变?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马