retain/copy/assign区别
轉(zhuǎn)自:http://blog.csdn.net/pjk1129/article/details/6457048#comments
在iphone程序中,屬性合成中的retain/copy/assign有什么區(qū)別?
?
1)assign就不用說(shuō)了,因?yàn)榛旧鲜菫楹?jiǎn)單數(shù)據(jù)類(lèi)型準(zhǔn)備的,原子類(lèi)類(lèi)型,例如CGPoint、CGFloat等,而不是NS對(duì)象們;
2)retain VS copy
- copy:?建立一個(gè)索引計(jì)數(shù)為1的對(duì)象,然后釋放舊對(duì)象
- retain:釋放舊的對(duì)象,將舊對(duì)象的值賦予輸入對(duì)象,再提高輸入對(duì)象的索引計(jì)數(shù)為1
Copy其實(shí)是建立了一個(gè)相同的對(duì)象,而retain不是:
比如一個(gè)NSString對(duì)象,地址為0×1111,內(nèi)容為@”STR”
Copy到另外一個(gè)NSString之后,地址為0×2222,內(nèi)容相同,新的對(duì)象retain為1,舊有對(duì)象沒(méi)有變化
retain到另外一個(gè)NSString之后,地址相同(建立一個(gè)指針,指針拷貝),內(nèi)容當(dāng)然相同,這個(gè)對(duì)象的retain值+1
也就是說(shuō),retain是指針拷貝,copy是內(nèi)容拷貝。
?
Objective-C中的copy和c++的一樣分深拷貝和淺拷貝,怎樣區(qū)分這兩個(gè)對(duì)象呢?我的理解是:
?? (1)深拷貝,就是新拷貝一塊內(nèi)存交給對(duì)象使用。
?? (2)淺拷貝,就是覺(jué)得拷貝內(nèi)存太浪費(fèi),直接給你我的地址吧,相當(dāng)于retain。
?
3)怎么區(qū)分這兩種對(duì)象呢?
?? ?在Objective-C里面只有一種情況是淺拷貝,那就是不可變對(duì)象的copy,其它的都是深拷貝(包括不可變對(duì)象mutableCopy、可變對(duì)象的的copy和mutableCopy)。
轉(zhuǎn)載于:https://www.cnblogs.com/jiangshiyong/archive/2012/06/14/2549643.html
總結(jié)
以上是生活随笔為你收集整理的retain/copy/assign区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: eclipse使用working set
- 下一篇: 黄聪:WordPress判断当前用户是否