屬性可以擁有的特質(zhì)分為四類:
1.原子性---nonatomic特性
在默認(rèn)情況下,由編譯器合成的方法會通過鎖定機制確保其原子性(atomicity)菠隆。如果屬性具備nonatomic性質(zhì)兵琳,則不使用同步鎖。請注意骇径,盡管沒有名為“atomic”的特性(如果某屬性不具備nonatomic)躯肌,但是仍然可以在屬性特質(zhì)中寫明這一點,編譯器不會報錯破衔。若是自己定定義存取方法清女,那么就該遵從與屬性特質(zhì)相符的原子特性。
2.讀/寫權(quán)限 --- readwrite(讀寫)晰筛、readonly(只讀)
3.內(nèi)存管理語義 --- assign嫡丙、strong拴袭、weak、unsafe_unretained曙博、copy
4拥刻、方法名 --- getter=<name>、setter=<name>
getter=<name>的 樣式:
@property(nonatomic,getter = isOn) BOOL on;
setter = <name>一般用在特殊的情境下羊瘩,比如:在數(shù)據(jù)反序列化泰佳、轉(zhuǎn)模型的過程中盼砍,服務(wù)器返回的字段如果以init開頭尘吗,所以你需要定義一個init開頭的屬性,但默認(rèn)生成setter與getter方法也會init開頭浇坐,而編譯器會吧所有以init開頭的方法當(dāng)成初始化方法睬捶,而初始化方法只能返回self類型,因此編譯器會報錯近刘;
這時你就可以使用下面的方式來避免編譯器報錯:
@property(nonatomic,strong,getter = p_initBy,setter = setP_initBy:)NSStirng *initBy;
另外也可以用關(guān)鍵字進(jìn)行特殊說明擒贸,來避免編譯器錯誤:
@property (nonatomic, readwrite, copy, null_resettable) NSString *initBy;
- (NSString *)initBy__attribute__((objc_method_family(none)));
不常用的:no nnull, null_resettable, nullable