IOS retain strong copy assign weak關鍵字

在iOS過程中,定義成員變量、屬性的時候,常常會用到retain strong copy assign weak等關鍵字,以下談一下個人的見解,如有錯漏,懇請大神斧正。


相信大家都有聽說過OC的ARC和MRC內存管理,retain和assign是MRC時代就有了,而在ARC提出後,strong就相當於retain,都是引用計數器+1,但是weak與assign就有點不一樣了,雖然都是弱引用,但是當屬性被釋放後,week會將屬性置nil,但是assign不會,這樣子就會成爲了野指針,是有風險的。copy不單隻引用計數器+1,對於可變對象還會做深拷貝的動作。

區別見下表:

關鍵字 引用計算器 區別說明
retain +1 強引用(MRC),拷貝指針,淺拷貝,引用計數器retainCount=0時,對象會被釋放
strong +1 強引用(ARC),拷貝指針,淺拷貝,引用計數器retainCount=0時,對象會被釋放
copy +1(屬性不可變)或不變(屬性可變) 強引用 ,當屬性不可變時,拷貝指針,引用計數器+1;當屬性可變時,深拷貝,創建新的對象,引用計數器不變。
assign 不變 弱引用(MRC),對象被銷燬時,不像強引用那樣因爲其它對於它的引用而受到影響,會立馬釋放,但是不會被置nil,指針會成爲野指針
weak 不變 弱引用(ARC),對象被銷燬時,不像強引用那樣因爲其它對於它的引用而受到影響,會立馬釋放,會被置nil,指針不會成爲野指針,相對assign安全

*注:

名字 說明
深拷貝(mutableCopy) 指針和內容拷貝,新的對象,引用計數器不加1
淺拷貝(copy) 指針拷貝,引用計數器加1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章