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

介紹及區(qū)別

  • copy:用于希望保持一份傳入值得拷貝,俄入世值自身的情況,既把原來的對象完整的賦值到另外一個地方,從新加載一內(nèi)存區(qū),味蕾一個地址的值改變了不影響另一個地址的值。
  • assign:簡單的直接賦值,相當于說兩個對象指向同一個內(nèi)存區(qū),當內(nèi)存區(qū)的值發(fā)生了改變,既所有指向這個內(nèi)存區(qū)的對象發(fā)生了改變。
  • retain:釋放舊對象,即將舊對象的值賦予輸出對象,再提高杜如丁香的引用計數(shù)+1

上面的意思是
Copy其實是建立了一個相同的對象,而retain不是

例如一個NSSting對象,地址為0x1111,內(nèi)容為@“123”
copy到另一個NSString之后,地址為0x2222,地址內(nèi)容相同,當新的對象發(fā)生改變時,原來的對象沒有發(fā)生改變(retain值沒有發(fā)生改變)
retain到另一個NSString之后,地址相同(建立一個指針,指針拷貝),內(nèi)容相同,之歌對象的retain值+1

assign 地址是0x1111,內(nèi)容也是‘ABC’

@property內(nèi)存管理策略的選擇

非ARC

  • Copy:只用于NSString\block
  • retain: 除NSString\block以外的OC對象
  • assign:基本數(shù)據(jù)類型、枚舉、結(jié)構(gòu)體(非OC對象),當2個對象想回引用時,一端用retain,一端用assign.

ARC

  • copy:只用于NSString\block
  • strong:除NSString\block以外的OC對象
  • weak:當兩個對象相互引用,一端用strong,一端用weak
  • assign:基本數(shù)據(jù)類型、枚舉、結(jié)構(gòu)體(非OC對象)

(此片文章參考了其他文章,是作者自己練習的文章)

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

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

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