在Xcode4.2之后,Objective-C新添加一項特性:property
在@property中屬性特性有3類
-
@property(多線程特性,讀寫特性,內存管理特性)屬性類型 屬性名稱
- 多線程特性:nonatomic,atomic
- 讀寫特性:readwrite,readonly
- 內存管理特性:strong,weak,copy,unsafe-unretain,retain,assign。
多線程特性
可選項:nonatomic,atomic;默認是atomic
nonatomic非原子性訪問,不加同步,多線程并發訪問會提高性能,但有可能會出現數據安全問題,一般iOS開發推薦此特性,數據安全問題交給服務器去處理。
atomic代表多線程并發安全。
- 讀寫特性
可選項:readwrite,readonly;默認是readwrite
如果屬性聲明為readwrite,那么同時也會自動生成set/get方法;
如果屬性聲明為readonly,那么只會生成get方法,而不會生成set方法
內存管理特性
可選項:strong,weak,copy,unsafe-unretain,retain,assign;默認為strong
strong,父對象對子對象的引用一般用這種方式
weak,為了避免循環引用導致內存泄漏,一般子對象指向父對象、父父對象的引用使用此特性。
copy,為此屬性賦值時,需要重新拷貝一份,賦值給屬性,修改原來的哪個對象不會影響屬性的值。常用于充當臨時變量保存其他對象指針的屬性,而且該指針是可變類型的。
unsafe-unretain,該屬性所致的對象被釋放的時候,該屬性不會被設置為nil,而是設置為空指針。
retain,在setter方法對參數進行release舊值在retain新值
assign,表示setter方法直接賦值,不進行任何retain操作,一般用于屬性為基本類型的聲明。更改屬性的set/get方法名
一般BOOL類型為應該以is開頭,可以通過修改sex屬性的get方法名
@property(nonatomic,getter = isMan )BOOL sex;
那么sex屬性的get方法名為isMan。
修改set方法名類似setter = set方法名