黑马程序员技术交流社区

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

作者: 王强~    时间: 2015-3-24 09:24
标题: copy retain mutableCopy
亲!  能不能说说它们之间的区别啊!!!
作者: marswawa    时间: 2015-3-24 10:37
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的区别就不言而喻了,前者只是单纯的地址传递,后者是内容传递,而且还要开辟新的空间来保存。
欢迎批评指正。

作者: 王强~    时间: 2015-3-24 14:56
marswawa 发表于 2015-3-24 10:37
copy retain mutableCopy:一起解释起来又点乱,我两个两个的比对给你说吧。首先说copy和retain。
copy和re ...

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

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

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

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





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