@property 后面的修飾符問題

ARC下默認的基本類型

@property (atomic, readwrite, assign)

ARC下默認的對象類型

@property? (atomic, readwrite, strong)

1、原子性修飾符 atomic、nonatomic

atomic:線程安全?????????? nonatomic:非線程安全,使用該屬性性能會有所提高,一般都使用該屬性

2、讀寫屬性修飾符?? readwrite、readonly

readwrite:讀寫操作,系統(tǒng)默認設置getter和setter方法,可以修改

readonly:只讀操作,系統(tǒng)只是設置getter方法,只能獲取不能修改

3、setter相關修飾符?? assign、retain、copy

assign:表示直接賦值,用于基本的數(shù)據(jù)類型如:NSIntegar、CGFloat。C的數(shù)據(jù)類型如:float、int、char等。還有id類型

retain:針對對象類型進行內存管理,修飾對象,實現(xiàn)過程(setter方法會先將舊的屬性release掉,然后再對新的對象進行一次賦值,并進行一次retain)引用計數(shù)會加1

copy:主要修飾NSString類型,表示內容的復制

【當某對象的類具有可修改的子類時,應該將屬性設為copy。例如:NSString,NSArray,NSDictionary】

這樣做的原因是:如果屬性指向的對象的類具有可修改的子類,那個該屬性可能會指向可修改的子類對象,同時該子類對象可能會被其他擁有者修改。因此,最好先復制該對象,然后再將屬性指向復制后的對象。(編寫具有“防御性”的代碼)

關于@property后面修飾符的一些問題

1、@property (nonatomic,copy) NSMutableArray *array; 這段代碼會有什么問題?

添加,刪除,修改數(shù)組內的元素的時候,程序會因為找不到對應的方法(unrecognised selector)而崩潰.因為 copy 就是復制一個不可變 NSArray的對象。

應如何修改?

@property (nonatomic,MUtableCopy) NSMutableArray *array;

2、assign與weak,它們都是弱引用聲明類型,最大的區(qū)別在那呢?

如果用weak聲明的變量在棧中就會自動清空,賦值為nil。

如果用assign聲明的變量在棧中可能不會自動賦值為nil,就會造成野指針錯誤!

3、用@property聲明的NSString(或NSArray,NSDictionary)經常使用copy關鍵字,為什么?如果改用strong關鍵字,可能造成什么問題?

1).因為父類指針可以指向子類對象,使用 copy 的目的是為了讓本對象的屬性不受外界影響,使用 copy 無論給我傳入是一個可變對象還是不可對象,我本身持有的就是一個不可變的副本.

2).如果我們使用是 strong ,那么這個屬性就有可能指向一個可變對象,如果這個可變對象在外部被修改了,那么會影響該屬性.

copy 此特質所表達的所屬關系與 strong 類似。然而設置方法并不保留新值,而是將其“拷貝” (copy)。 當屬性類型為 NSString 時,經常用此特質來保護其封裝性,因為傳遞給設置方法的新值有可能指向一個 NSMutableString 類的實例。這個類是 NSString 的子類,表示一種可修改其值的字符串,此時若是不拷貝字符串,那么設置完屬性之后,字符串的值就可能會在對象不知情的情況下遭人更改。所以,這時就要拷貝一份“不可變” (immutable)的字符串,確保對象中的字符串值不會無意間變動。只要實現(xiàn)屬性所用的對象是“可變的” (mutable),就應該在設置新屬性值時拷貝一份。

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

相關閱讀更多精彩內容

  • 1 我時常感覺很多事情的發(fā)生,都不在自己的規(guī)劃內。這樣的突發(fā)事件,有時會讓我感到恐慌與不安。我身邊也有很多朋友,和...
    6c676d940028閱讀 927評論 0 12
  • 周末的懶覺總是泡湯!!不到七點,兒子就醒了,自己穿好衣服,吃了個零食,在那玩。我起床做了兒子愛吃的蛋炒飯,兒子吃的...
    薇薇冰朵閱讀 217評論 0 1
  • 為何公共物品必須政府掌控呢?首先要定義何為公共物品: 路燈是公共物品 ↓ 一個人使用路燈照明不會影響另一個人對路燈...
    張歆琳閱讀 647評論 0 1

友情鏈接更多精彩內容