iOS 的 property中的關鍵字

2022-09-13 07:24:10 字數 1531 閱讀 4030

所有者屬性

我們先來看看與所有權有關係的屬性,關鍵字間的對應關係。

屬性值關鍵字

所有權strong

__strong

有weak

__weak

無unsafe_unretained

__unsafe_unretained

無copy

__strong

有assign

__unsafe_unretained

無retain

__strong

strong該屬性值對應 __strong 關鍵字,即該屬性所宣告的變數將成為物件的持有者。

weak該屬性對應 __weak 關鍵字,與 __weak 定義的變數一致,該屬性所宣告的變數將沒有物件的所有權,並且當物件被破棄之後,物件將被自動賦值nil。

並且,delegate 和 outlet 應該用 weak 屬性來宣告。同時,如上一回介紹的 ios 5 之前的版本是沒有 __weak 關鍵字的,所以 weak 屬性是不能使用的。這種情況我們使用 unsafe_unretained。

unsafe_unretained等效於__unsafe_unretaind關鍵字宣告的變數;像上面說明的,ios 5之前的系統用該屬性代替 weak 來使用。

copy與 strong 的區別是宣告變數是拷貝物件的持有者。

assign一般scalar varible用該屬性宣告,比如,int, bool。

retain該屬性與 strong 一致;只是可讀性更強一些。

讀寫相關的屬性 (readwrite, readonly)

讀寫相關的屬性有 readwrite 和 readonly 兩種,如果使用arc之後,我麼需要注意一下 readonly 屬性的使用。

比如下面的變數宣告。

1

@property (nonatomic, readonly) nsstring *name;

一般宣告為 readonly 的變數按理說應該不需要持有所有權了,但是在arc有效的情況下,將出現下面的錯誤資訊 :

「arc forbids synthesizing a property of an objective-c object with unspecified ownership or storage attribute」

如果定義了arc有效,那麼必須要有所有者屬性的定義;所以我們的**改成這樣,就ok了

1

@property (nonatomic, strong, readonly) nsstring *name;

不過有一點,scalar varible的變數預設都有 assign 的屬性定義,所以不需要給他們單獨的明示宣告了。

ios開發中 property的屬性介紹

大家都知道 property和 synthesize可以自動生成某個類成員變數的訪問方法,但可能對property中的一些屬性不是很了解,網上的一些介紹有的不是很正確,感覺會誤導新手,於是準備詳細介紹一下property中的詳細屬性。先介紹一下預設的情況 readwrite 這個屬性是預設的情況,會...

iOS開發中 property的屬性介紹

property與 synthesize是成對出現的,可以自動生成某個類成員變數的訪問方法。在xcode4.5以及以後的版本,synthesize可以省略。1.atomic與nonatomic atomic 預設是有該屬性的,這個屬性是為了保證程式在多執行緒情況,編譯器會自動生成一些互斥加鎖 避免該...

iOS開發中 property的屬性介紹

property與 synthesize是成對出現的,可以自動生成某個類成員變數的訪問方法。在xcode4.5以及以後的版本,synthesize可以省略。1.atomic與nonatomic atomic 預設是有該屬性的,這個屬性是為了保證程式在多執行緒情況,編譯器會自動生成一些互斥加鎖 避免該...