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

@property (nonatomic, assign) NSString *title;

什麼是assign,copy,retain之間的區別?

assign: 簡單賦值,不更改索引計數(Reference Counting)。

copy: 建立一個索引計數爲1的對象,然後釋放舊對象

retain:釋放舊的對象,將舊對象的值賦予輸入對象,再提高輸入對象的索引計數爲1

weak 和strong的區別:

(weak和strong)不同的是 當一個對象不再有strong類型的指針指向它的時候 它會被釋放 ,即使還有weak型指針指向它。

一旦最後一個strong型指針離去 ,這個對象將被釋放,所有剩餘的weak型指針都將被清除。

可能有個例子形容是妥當的。

想象我們的對象是一條狗,狗想要跑掉(被釋放)。

strong型指針就像是栓住的狗。只要你用牽繩掛住狗,狗就不會跑掉。如果有5個人牽着一條狗(5個strong型指針指向1個對象),除非5個牽繩都脫落 ,否着狗是不會跑掉的。

weak型指針就像是一個小孩指着狗喊到:“看!一隻狗在那” 只要狗一直被栓着,小孩就能看到狗,(weak指針)會一直指向它。只要狗的牽繩脫落,狗就會跑掉,不管有多少小孩在看着它。

只要最後一個strong型指針不再指向對象,那麼對象就會被釋放,同時所有的weak型指針都將會被清除。

使用assign: 對基礎數據類型 (NSInteger,CGFloat)和C數據類型(int, float, double, char, 等等)

使用copy: 對NSString

使用retain: 對其他NSObject和其子類

nonatomic關鍵字:

atomic是Objc使用的一種線程保護技術,基本上來講,是防止在寫未完成的時候被另外一個線程讀取,造成數據錯誤。而這種機制是耗費系統資源的,所以在iPhone這種小型設備上,如果沒有使用多線程間的通訊編程,那麼nonatomic是一個非常好的選擇。

發佈了50 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章