Objective-c中通過屬性(property)可以為類聲明實例變量並實現相應的存儲方法,而且比用戶自己實現更簡潔。
一.屬性用法
用關鍵字property聲明屬性,語法形式為:@property (特性列表)類型 對象名;其中特性列表為可選項,如果無特性列表,例如,@property NSString itemName; 則默認特性為string, readwrite, nonatomic。編譯器自動生成了實例變量NSString *_itemName 和存儲方法- (void)setItemName:(NSString )name、- (NSString *)itemName。
表1 使用和不使用屬性的兩個等價類
不使用屬性 使用屬性 CNTThing.h @interface CNTThing : NSObject
二.使用屬性應注意的問題
1.屬性的特性
@property (特性1,特性2,…)對象類型 對象名字;
其中特性有nonatomic, atomic, readwrite, readonly, strong, weak, copy等,nonatomic非原子操作,常用於界面元素,不用考慮線程安全,速度快。
2.自定義屬性
如果屬性自動生成的存取方法無法滿足要求可以自定義存取方法,自定義存取方法應注意一個問題,當全部的方法都自定義時,用戶需顯式定義屬性和變量。上例中如果用戶自定義了name和setName方法,則需要在CNTThing.m中添加”@synthesize name = _name;”告訴編譯器創建屬性和實例變量_name。用戶自定義了全部的方法也意味著假設name被聲明為只讀(readonly)屬性,用戶自定義了取方法,則需用“@synthesize”告訴編譯器生成對象和方法。