@property 特性分為三類:原子性、存取器控制盯蝴、內(nèi)存管理毅哗。
原子性
- atomic 指定屬性的原子操作是線程安全的,類似鎖捧挺,只有一個(gè)線程訪問實(shí)例變量虑绵,默認(rèn)限定符,可缺省闽烙。
- nonatomic 指定屬性的原子操作是線程不安全的翅睛,可提高訪問速度,非多線程時(shí)訪問數(shù)據(jù)時(shí)建議使用黑竞。
存取器控制
- readwrite 指定屬性可讀可寫捕发,默認(rèn)限定符,可以省略不寫很魂。
- readonly 指定屬性只讀扎酷,沒有 setter 方法。
有時(shí)候?yàn)榱苏Z意更明確遏匆,可以自定義訪問器的名字法挨,如
@property (nonatomic, setter=changeName:, getter=fullName) NSString *name;
//應(yīng)用:
[self changeName:@"jack"];
NSLog(@"%@",[self fullName]);//打印:jack
最常見的是運(yùn)用于 Bool 類型幅聘,如下聲明一個(gè)隱藏屬性:
@property (nonatomic,getter = isHidden ) BOOL hidden;
內(nèi)存管理
- strong 強(qiáng)引用關(guān)系凡纳,即擁有對象的所有權(quán),對象的 returnCount + 1帝蒿,默認(rèn)限定符荐糜,可缺省。
- weak 弱引用關(guān)系葛超,即對引用的對象沒有所有權(quán)暴氏,當(dāng)引用計(jì)數(shù)為零時(shí),也就是對象釋放后巩掺,weak 修飾的變量置為 nil偏序。
- copy 與 strong 類似,區(qū)別是對傳入對象的副本擁有所有權(quán)胖替,非對象本身。
- assign 表示直接賦值豫缨,主要用于基本數(shù)據(jù)類型独令,如 int等。也包括不存在所有權(quán)關(guān)系的對象好芭,如 delegate燃箭。