聲明property的語法爲:多線程
@property (參數1,參數2) 類型 名字;
如:性能
@property(nonatomic,retain) UIWindow *window;
其中參數主要分爲三類:atom
讀寫屬性: (readwrite/readonly) setter語意:(assign/retain/copy) 原子性: (atomicity/nonatomic)
各參數意義以下:.net
readwrite: 產生settergetter方法線程
readonly: 只產生簡單的getter,沒有setter。指針
assign: 默認類型,setter方法直接賦值,而不進行retain操做code
retain: setter方法對參數進行release舊值,再retain新值。對象
copy: setter方法進行Copy操做,與retain同樣blog
nonatomic: 禁止多線程,變量保護,提升性能內存
(a)retain:release 舊值,retain 新值(適用於 OC對象類型)
(b)assign:直接賦值(默認,適用於非OC對象類型), 經常使用在 BOOL 、int 等基本數據類型。
(c)copy:release 舊值,copy新值, 經常使用在 NSString對象
(a)readwriter:同時生成set和get方法的聲明和實現
(b)readonly:只生成 get的聲明和實現
(a)nonatomic:性能高(通常都是使用這個)
(b)atomic:性能低(默認)
(a)setter:決定了 set 方法的名稱,必定要加個冒號「:「
(b)getter:決定了 get 方法的名稱,不要加冒號
(a) strong: 用於通常對象
(b) weak: 用於UI控件
Person *p = [Person new];
至關於:
id p = [Person new];
注意 id 和 p 之間不要再加了,id 中默認就帶了。