iOS属性之assign,copy,retain的区别以及weak和strong的区别
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
@property (nonatomic, assign) NSString *title;?
什么是assign,copy,retain之間的區(qū)別??
assign: 簡(jiǎn)單賦值,不更改索引計(jì)數(shù)(Reference Counting)。?
copy: 建立一個(gè)索引計(jì)數(shù)為1的對(duì)象,然后釋放舊對(duì)象?
retain:釋放舊的對(duì)象,將舊對(duì)象的值賦予輸入對(duì)象,再提高輸入對(duì)象的索引計(jì)數(shù)為1?
?weak 和strong的區(qū)別:
(weak和strong)不同的是 當(dāng)一個(gè)對(duì)象不再有strong類型的指針指向它的時(shí)候 它會(huì)被釋放 ?,即使還有weak型指針指向它。
一旦最后一個(gè)strong型指針離去 ,這個(gè)對(duì)象將被釋放,所有剩余的weak型指針都將被清除。
可能有個(gè)例子形容是妥當(dāng)?shù)摹?/p>
想象我們的對(duì)象是一條狗,狗想要跑掉(被釋放)。
strong型指針就像是栓住的狗。只要你用牽繩掛住狗,狗就不會(huì)跑掉。如果有5個(gè)人牽著一條狗(5個(gè)strong型指針指向1個(gè)對(duì)象),除非5個(gè)牽繩都脫落 ,否著狗是不會(huì)跑掉的。
weak型指針就像是一個(gè)小孩指著狗喊到:“看!一只狗在那” 只要狗一直被栓著,小孩就能看到狗,(weak指針)會(huì)一直指向它。只要狗的牽繩脫落,狗就會(huì)跑掉,不管有多少小孩在看著它。?
只要最后一個(gè)strong型指針不再指向?qū)ο?#xff0c;那么對(duì)象就會(huì)被釋放,同時(shí)所有的weak型指針都將會(huì)被清除。
使用assign: 對(duì)基礎(chǔ)數(shù)據(jù)類型 (NSInteger,CGFloat)和C數(shù)據(jù)類型(int, float, double, char, 等等)?
使用copy: 對(duì)NSString?
使用retain: 對(duì)其他NSObject和其子類?
nonatomic關(guān)鍵字:?
atomic是Objc使用的一種線程保護(hù)技術(shù),基本上來(lái)講,是防止在寫(xiě)未完成的時(shí)候被另外一個(gè)線程讀取,造成數(shù)據(jù)錯(cuò)誤。而這種機(jī)制是耗費(fèi)系統(tǒng)資源的,所以在iPhone這種小型設(shè)備上,如果沒(méi)有使用多線程間的通訊編程,那么nonatomic是一個(gè)非常好的選擇。
轉(zhuǎn)載于:https://my.oschina.net/chars/blog/532657
總結(jié)
以上是生活随笔為你收集整理的iOS属性之assign,copy,retain的区别以及weak和strong的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JavaScript多线程之HTML5
- 下一篇: ffmpeg把ts文件转m3u8并切片