assign,copy,retain之間的區別

2021-07-09 05:47:38 字數 886 閱讀 1442

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是乙個非常好的選擇。

assign,copy,retain之間區別

assign 簡單賦值,不更改索引計數 reference counting copy 建立乙個索引計數為1的物件,然後釋放舊物件 retain 釋放舊的物件,將舊物件的值賦予輸入物件,再提高輸入物件的索引計數為1 還可以這樣理解 使用assign 對基礎資料型別 nsinteger 和c資料型別 ...

nil Nil NULL NSNull 之間的區別

nil 是對objective c id 物件賦空值 例如 nsstring string nsstring stringwithformat test string nil 對於objective c 集合類物件 比如陣列物件,字典物件,當我們不需要再使用他們的時候,對他們release 的同時最...

TCP UDP HTTP SOCKET之間的區別

網路層協議 網際協議 ip 位址解析協議 arp 傳輸層協議 傳輸控制協議 tcp 使用者資料報協議 udp 應用層協議 超文字傳輸協議 http 檔案傳輸協議 ftp 遠端登入協議 telnet 網域名稱服務協議 dns 簡單郵件傳輸協議 smtp 郵局協議 pop3 tcp和udp使用ip協議從...