黑馬程序員_OC基礎11_@property參數

---------------------------------------- android培訓java培訓、期待與您交流! ----------------------------------


PS:上一篇博客詳細講了OC 內存管理的細節,但是以前的內存管理都用很多重複的垃圾代碼,使用@property的retain參數,即可省略set方法裏面手動對對象的計數器操作。


一、property參數說明(需要熟記掌握)

 1.set方法內存管理相關的參數
 * retain : release舊值,retain新值(適用於OC對象類型
 * assign : 直接賦值(默認,適用於非OC對象類型
 * copy   : release舊值,copy新值


 
 2.是否要生成set方法
 * readwrite : 同時生成setter和getter的聲明、實現(默認)
 * readonly  : 只會生成getter的聲明、實現


 
 3.多線程管理
 * nonatomic : 性能高 (一般就用這個);禁止多線程,變量保護,提高性能
 * atomic    : 性能低(默認)


 
 4.setter和getter方法的名稱
 * setter : 決定了set方法的名稱,一定要有個冒號 :
 * getter : 決定了get方法的名稱(一般用在BOOL類型)



eg:代碼示例

@interface Person : NSObject


// 返回BOOL類型的方法名一般以is開頭,把默認的get方法(rich)改成isRich,但成員變量還是不變,還是_rich
@property (getter = isRich) BOOL rich;

//參數屬性:高性能,int數據類型成員變量,可讀可寫
@property (nonatomic, assign, readwrite) int weight;
// setWeight:
// weight

// 參數屬性:低性能(默認atomic),可讀可寫,int數據類型成員變量
@property (readwrite, assign) int height;
// 參數屬性:高性能,int數據類型成員變量
@property (nonatomic, assign) int age;
// 參數屬性:字符串對象成員變量,需要進行內存管理
@property (retain) NSString *name;@end



二、補充@property配合@synthesize的用法

@property是Objective-C語言關鍵詞,與@synthesize配對使用。xcode4.5以及以後的版本,@synthesize可以省略
功能:讓編譯器自動編寫一個與數據成員同名的方法聲明來省去讀寫方法的聲明。

1、在頭文件(.h)中:

@property int age;
等效於在頭文件中聲明2個方法:
- (int)count;
-(void)setCount:(int)newCount;

2、實現文件(.m)中

@synthesize count;

等效於在實現文件(.m)中實現2個方法。

- (int)count
{
return count;
}
-(void)setCount:(int)newCount
{
count = newCount;
}
PS:以上等效的函數部分由編譯器自動幫開發者填充完成,簡化了編碼輸入工作量。



-------------------------------------- android培訓java培訓、期待與您交流! ------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章