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的区别就不言而喻了,前者只是单纯的地址传递,后者是内容传递,而且还要开辟新的空间来保存。
欢迎批评指正。
|