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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王强~ 中级黑马   /  2015-3-24 09:24  /  1090 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

亲!  能不能说说它们之间的区别啊!!!

4 个回复

倒序浏览
copy retain mutableCopy:一起解释起来又点乱,我两个两个的比对给你说吧。首先说copy和retain。
copy和retain都是返回的时当前对象的地址,谁调用就返回谁的地址给当前变量指向,事实上大家指向的都是同一个对象,但是copy仅仅是复制调用者指向的内存空间,而retain还要对那个调用的对象进行一次计数器+1的操作。举个例子:代码我简写你能看懂就行。p1 = [[person alloc] init]; p2 = [p1 copy];  p3 = [p1 retain];
p2仅仅是复制了p1的内存地址,大家都指向了同一个person对象,而p3将p1指向的person对象+1然后返回哪个person对象的内存地址。
但是字符串稍有不同:
s1 = @“abc”;   s2  = [s1 copy];  s3 = [s1 retain](注意此处因为s1是常量字符串,因此无论你如何操作其计数器结果都是-1)。
再说copy和mutableCopy吧:
copy前面已经说了,那我着重说下后者,mutableCopy做的事情是将原来对象的“内容”复制过来,然后重新开辟内存空间将复制来的对象保存起来。
所以copy和mutableCopy的区别就不言而喻了,前者只是单纯的地址传递,后者是内容传递,而且还要开辟新的空间来保存。
欢迎批评指正。
回复 使用道具 举报
marswawa 发表于 2015-3-24 10:37
copy retain mutableCopy:一起解释起来又点乱,我两个两个的比对给你说吧。首先说copy和retain。
copy和re ...

copy : 是指向元素内存空间
retain: 是指向元素内存空间后计数器+1
mutablecopy : 是创建新内存空间,并指向  
是这样理解么
回复 使用道具 举报
本帖最后由 marswawa 于 2015-3-24 15:32 编辑
王强~ 发表于 2015-3-24 14:56
copy : 是指向元素内存空间
retain: 是指向元素内存空间后计数器+1
mutablecopy : 是创建新内存空间,并 ...

retain:始终是浅复制。引用计数每次加一。返回对象是否可变与被复制的对象保持一致。

copy:对于可变对象为深复制,引用计数不改变;对于不可变对象是浅复制,
         引用计数每次加一。始终返回一个不可变对象。

mutableCopy:始终是深复制,引用计数不改变。始终返回一个可变对象。

点评

谢谢 ,说地很明白啊~~  发表于 2015-3-24 17:36
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马