property的使用策略

Property常用的屬性

  1. readwrite  產(chǎn)生setter\getter?方法
  2. readonly   只產(chǎn)生簡(jiǎn)單的getter,沒(méi)有setter, 默認(rèn)的讀寫(xiě)屬性  
  3. setter     指定生成setter?法的名字
  4. getter     指定生成getter方法的名字
  5. assign     默認(rèn)類(lèi)型,setter方法直接賦值,而不進(jìn)?retain操作,適?于基本數(shù)據(jù)類(lèi)型, 對(duì)象類(lèi)型, 不會(huì)發(fā)?生引用計(jì)數(shù)變化
  6. retain     setter方法對(duì)參數(shù)進(jìn)?行release舊值,再retain新值
  7. copy       setter方法進(jìn)?行Copy操作,與retain一樣
  8. atomic     保證多線程訪問(wèn)下的安全,但浪費(fèi)系
     nonatomic  禁?多線程,變量保護(hù),提高性能

常用場(chǎng)景

 1.copy  使用類(lèi)型 :NSString,block
 2.assign使用類(lèi)型 :delegate,int,float,NSInteger,bool,枚舉,結(jié)構(gòu)體...
 3.retain使用類(lèi)型 :NSArray,NSDate 
 4.strong使用類(lèi)型 :NSString/block以外的OC對(duì)象
 5.weak  使用類(lèi)型 :當(dāng)2個(gè)對(duì)象相互引用,一端用strong,一端用weak;
 6.readOnly     :只讀時(shí)候(即只需要getter方法的時(shí)候);
   readWriete   :默認(rèn)屬性(getter&&setter方法)

屬性中的修飾詞 :

assign ( ARC/MRC )
1:assign用于值類(lèi)型,如int、float、double和NSInteger,CGFloat等表示單純的復(fù)制。還包括不存在所有權(quán)關(guān)系的對(duì)象,比如常見(jiàn)的delegate。.
2.當(dāng)然其實(shí)對(duì)象也可以用 assign 修飾 , 只是對(duì)象的計(jì)數(shù)器不會(huì)+1 . ( 與 strong 的區(qū)別 )
3.如果用來(lái)修飾對(duì)象屬性 , 那么當(dāng)對(duì)象被銷(xiāo)毀后指針是不會(huì)指向 nil 的 . 所以會(huì)出現(xiàn)野指針錯(cuò)誤 . ( 與weak的區(qū)別 )


weak ( ARC )
1.弱指針是針對(duì)對(duì)象的修飾詞 , 就是說(shuō)它不能修飾基本數(shù)據(jù)類(lèi)型 .
2.weak 修飾的對(duì)象計(jì)數(shù)器不會(huì)+1 , 也就是直接賦值 .
3.弱引用是為打破循環(huán)引用而生的 .
4.它最被人所喜歡的原因是 它所指向的對(duì)象如果被銷(xiāo)毀 , 它會(huì)指向 nil . 而 nil 訪問(wèn)什么鬼都不會(huì)報(bào)野指針錯(cuò)誤 .


strong ( ARC )
1.直接賦值并且計(jì)數(shù)器 +1 .
2.在 ARC 里替代了 retain 的作用 .


retain ( MRC )
1.release 舊對(duì)象( 舊對(duì)象計(jì)數(shù)器 -1 ) , retain 新對(duì)象( 新對(duì)象計(jì)數(shù)器 +1 ) , 然后指向新對(duì)象 .
2.在set方法里面是這樣的 :

if (_delegate) {
[_delegate release];
}
_delegate = [delegate retain];


copy ( ARC/MRC )
1.copy 在 MRC 時(shí)是這樣做的 release 舊對(duì)象( 舊對(duì)象計(jì)數(shù)器 -1 ) , copy 新對(duì)象( 新對(duì)象計(jì)數(shù)器 +1 ) , 然后指向新對(duì)象 .
1.1在set方法里面是這樣的 :

if (_delegate) {
[_delegate release];
}
_delegate = [delegate copy];
2.copy 在 ARC 時(shí)是這么干的 copy 新對(duì)象( 新對(duì)象計(jì)數(shù)器 +1 ) , 然后指向新對(duì)象 .
2.1在set方法里面是這樣的 :

_delegate = [delegate copy];
3.使用注意 :
3.1 修飾的屬性本身要不可變的 . 例如 NSMutableArray 采用 copy 修飾 , 添加元素表面上可以 一到運(yùn)行就崩潰了 , 因?yàn)?copy 過(guò)后實(shí)際上成了NSArray了 . ( 隊(duì)友 , 我們不吭你 )
3.2 遵守 NSCopying 協(xié)議的對(duì)象使用 .


nonatomic ( ARC/MRC )
1.不對(duì)set方法加鎖 .
2.性能好
3.線程不安全

atomic ( ARC/MRC )
1.原子屬性就是對(duì)生成的 set 方法加互斥鎖 @synchronized(鎖對(duì)象) .

@synchronized(self) {
_delegate = delegate;
}
2.需要消耗系統(tǒng)資源 .
3.互斥鎖是利用線程同步實(shí)現(xiàn)的 , 意在保證同一時(shí)間只有一個(gè)線程調(diào)用 set 方法 .
4.其實(shí)還有 get 方法 , 要是同時(shí) set 和 get 一起調(diào)用還是會(huì)有問(wèn)題的 . 所以即使用了 atomic 修飾 還是不夠安全 .


readonly
1.讓 Xcode 只生成get方法 .
2.不想把暴露的屬性被人隨便替換時(shí) , 可以使用 .


readwrite
1.讓 Xcode 生成get/set方法 .
2.不用 readonly 修飾時(shí) , 默認(rèn)就是 readwrite .


getter/setter 的自定義方法名 .
1.一般對(duì)于 有/無(wú) 是/否 等這樣的屬性 , getter 方法名前面加個(gè) is 會(huì)顯得通俗易懂 .

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 面試題參考1 : 面試題[http://www.cocoachina.com/ios/20150803/12872...
    江河_ios閱讀 1,806評(píng)論 0 4
  • iOS內(nèi)存管理 概述 什么是內(nèi)存管理 應(yīng)用程序內(nèi)存管理是在程序運(yùn)行時(shí)分配內(nèi)存(比如創(chuàng)建一個(gè)對(duì)象,會(huì)增加內(nèi)存占用)與...
    蚊香醬閱讀 5,806評(píng)論 8 119
  • 回憶是妙不可言的,又是如此的痛徹心扉。我應(yīng)當(dāng)品嘗過(guò)它的甜美,那些若隱若現(xiàn)的東西在腦海中此起彼落,你妄圖抓住什么實(shí)質(zhì)...
    李良閱讀 378評(píng)論 0 1
  • 楊絳先生的《我們仨》寫(xiě)的親切,平實(shí)的感情,讓人忍不住落下淚來(lái)。讀到中途好幾次都放下書(shū)來(lái),委屈似的默默傷懷一會(huì)...
    毛豆六六閱讀 713評(píng)論 0 12
  • 我準(zhǔn)備參賽了,合作學(xué)習(xí)的比賽,自己先說(shuō)說(shuō)課,自己內(nèi)觀一下,思路是否清晰,邏輯是否嚴(yán)謹(jǐn),孩子們是否站在課堂中央真...
    晚起畫(huà)蛾眉閱讀 2,866評(píng)論 0 1

友情鏈接更多精彩內(nèi)容