說一下對 retain
, copy
, assign
, weak
, _Unsafe_Unretain
關鍵字的了解。
retain
copy
assign
weak
_Unsafe_Unretain
Strong
修飾符表示指向并持有該對象,其修飾對象的引用計數會加1。該對象隻要引用計數不為0就不會被銷毀。當然可以通過将變量強制指派
Strong
來進行銷毀。
nil
Weak
修飾符指向但是并不持有該對象,引用計數也不會加1。在
weak
中對該屬性進行了相關操作,無需處理,可以自動銷毀。
Runtime
用來修飾對象,多用于避免循環引用的地方。
weak
不可以修飾基本資料類型。
weak
assign
assign
主要用于修飾基本資料類型,
例如
,
NSInteger
,存儲在棧中,記憶體不用程式員管理。
CGFloat
是可以修飾對象的,但是會出現問題。
assign
copy
關鍵字和
copy
類似,
strong
多用于修飾有可變類型的不可變對象上
copy
,
NSString
,
NSArray
上。
NSDictionary
__unsafe_unretain
類似于
__unsafe_unretain
,但是當對象被釋放後,指針已然儲存着之前的位址,被釋放後的位址變為
weak
,通路被釋放的位址就會出問題,是以說他是不安全的。
僵屍對象
__autoreleasing
将對象指派給附有修飾的變量等同于
__autoreleasing
無效時調用對象的
ARC
方法,實質就是扔進了自動釋放池。
autorelease