上一回咱們學到了一些ARC的基本概念,這一次咱們來看看ARC對@property的使用規則有何影響。 atom
咱們先來看看與全部權有關係的屬性,關鍵字間的對應關係。 spa
屬性值 | 關鍵字 | 全部權 |
---|---|---|
strong | __strong | 有 |
weak | __weak | 無 |
unsafe_unretained | __unsafe_unretained | 無 |
copy | __strong | 有 |
assign | __unsafe_unretained | 無 |
retain | __strong | 有 |
讀寫相關的屬性有 readwrite 和 readonly 兩種,若是使用ARC以後,我麼須要注意一下 readonly 屬性的使用。 code
好比下面的變量聲明。 對象
@property (nonatomic, readonly) NSString *name;
通常聲明爲 readonly 的變量按理說應該不須要持有全部權了,可是在ARC有效的狀況下,將出現下面的錯誤信息 : ip
「ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute」 ci
若是定義了ARC有效,那麼必需要有全部者屬性的定義;因此咱們的代碼改爲這樣,就OK了 it
@property (nonatomic, strong, readonly) NSString *name;
不過有一點,Scalar Varible的變量缺省都有 assign 的屬性定義,因此不須要給他們單獨的明示聲明瞭。 table