天天看點

iOS 記憶體管理面試題(說一下對 retain,copy,assign,weak,_Unsafe_Unretain 關鍵字的了解)

說一下對 

retain

,

copy

,

assign

,

weak

,

_Unsafe_Unretain

 關鍵字的了解。

Strong

Strong

 修飾符表示指向并持有該對象,其修飾對象的引用計數會加1。該對象隻要引用計數不為0就不會被銷毀。當然可以通過将變量強制指派 

nil

 來進行銷毀。

Weak

weak

 修飾符指向但是并不持有該對象,引用計數也不會加1。在 

Runtime

 中對該屬性進行了相關操作,無需處理,可以自動銷毀。

weak

用來修飾對象,多用于避免循環引用的地方。

weak

 不可以修飾基本資料類型。

assign

assign

主要用于修飾基本資料類型,

例如

NSInteger

CGFloat

,存儲在棧中,記憶體不用程式員管理。

assign

是可以修飾對象的,但是會出現問題。

copy

copy

關鍵字和 

strong

類似,

copy

 多用于修飾有可變類型的不可變對象上 

NSString

,

NSArray

,

NSDictionary

上。

__unsafe_unretain

__unsafe_unretain

 類似于 

weak

 ,但是當對象被釋放後,指針已然儲存着之前的位址,被釋放後的位址變為 

僵屍對象

,通路被釋放的位址就會出問題,是以說他是不安全的。

__autoreleasing

将對象指派給附有 

__autoreleasing

修飾的變量等同于 

ARC

 無效時調用對象的 

autorelease

 方法,實質就是扔進了自動釋放池。