OC中assign,copy,retain之間的區(qū)別 及weak和strong的區(qū)別

? copy: 用于希望保持一份傳入值的拷貝,而不是值自身的情況,即把原來(lái)的對(duì)象完整的賦值到另外一地方,重新加載一內(nèi)存區(qū),一個(gè)地方變了不影響另一個(gè)地方的對(duì)象。

? assign:? 簡(jiǎn)單的直接賦值,相當(dāng)于說(shuō)兩個(gè)對(duì)象指向同個(gè)內(nèi)存區(qū),一個(gè)地方的變了,其他的也跟著改變。

? retain:釋放舊的對(duì)象,將舊對(duì)象的值賦予輸入對(duì)象,再提高輸入對(duì)象的索引計(jì)數(shù) 為1

那上面的是什么意思呢?

Copy 其實(shí)是建立了一個(gè)相同的對(duì)象,而 retain 不是:

比如一個(gè) NSString 對(duì)象,地址為 0×1111,內(nèi)容為@”ABC”

Copy 到另外一個(gè) NSString 之 后,地址為 0×2222,內(nèi)容相同,新的對(duì)象 retain 為 1, 舊 有對(duì)象沒有變化

retain 到另外一個(gè) NSString 之 后,地址相同(建立一個(gè)指針,指針拷貝),內(nèi)容當(dāng)然相 同,這個(gè)對(duì)象的 retain 值+1

assign 地址還是0x1111,內(nèi)容也還是“ABC”。

也就是說(shuō),retain 是指針拷貝,copy 是內(nèi)容拷貝。

strong,weak 用來(lái)修飾屬性。

strong 用來(lái)修飾強(qiáng)引用的屬性;

@property(strong) SomeClass * aObject;

對(duì)應(yīng)原來(lái)的

@property(retain) SomeClass * aObject; 和@property(copy) SomeClass * aObject;

weak 用來(lái)修飾弱引用的屬性;

@property (weak) SomeClass * aObject;

對(duì)應(yīng)原來(lái)的

@property (assign) SomeClass * aObject;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容