1、@property參數
參數包括
1,getter=getterName,setter=setterName,設置setter與getter的方法名,除非你想自己取名,否則一般使用默認的名字即可。以免造成混亂。
2,readwrite,readonly (只生成getter方法),設置可供訪問級別的限制。
2,assign,調用setter方法時直接賦值,不進行任何retain操作。
3,retain,調用setter方法時,先release舊值,然後對賦予的新值執行retain,相當於一次指針的拷貝。
4,copy,setter方法進行Copy操作,與retain處理流程一樣,先release舊值,再Copy出新的對象,retainCount爲1。其實是建立一個新的對象。
5,nonatomic,非原子性訪問,不加同步,多線程併發訪問會提高性能。atomic是Objc使用的一種線程保護技術,基本上來講,是防止在寫未完成的時候被另外一個線程讀取,造成數據錯誤。而這種機制是耗費系統資源的,所以在iPhone這種小型設備上,如果沒有使用多線程間的通訊編程,那麼nonatomic是一個非常好的選擇。
【以上引用自http://m.blog.csdn.net/blog/luohai859/42457963】
【retain】在一個類中有其他對象的(關聯對象)的時候會使用retain,【適用於OC對象】
【assign】實例變量是基本數據類型時,是默認值,可以不寫
【替換setter方法】
例如:
@property(assign,setter = isVip:,getter = isVip) BOOL vip;
Person *p = [Person new];
//替換後該set方法只能這樣調用
[p isVip:YES];
//替換後get方法可以有兩種調用方式,如下
if ([p isVip]&&p.isVip) {
NSLog(@"p is vip");
}
打印結果:
2015-10-06 13:56:50.995 ClassOne[1503:303] p is vip