Objective-c中有這么兩個關鍵字:@property和@synthesize。在這篇文章中簡單記錄一下學習這兩個關鍵字的筆記。
@property
@property是OC中能夠快速的定義一個屬性的方式,而且他可以設置一些值,就可以達到一定的效果,比如引用計數(shù)的問題。
在之前,我們在{……}中定義屬性,然后還可能需要實現(xiàn)get/set方法。在這里,我們可以直接使用@property關鍵字進行定義:
@property NSString *userName;
定義完之后就可以直接使用這個屬性,并且自動生成get/set方法。
它還有三個值可以設置
@property(atomic,retain,readwrite) Dog *dog;
/*
* atomic:默認值,線程保護;
nonatomic:線程不保護的。
* assign:默認值,直接賦值;
retain:保留對象,內(nèi)部會自動調(diào)用retain方法,引用計數(shù)+1;
copy:拷貝對象。
* readwrite:默認值生成get/set方法;
readonly:只生成get方法。
*/
assign: 用于非指針變量。用于基礎數(shù)據(jù)類型(例如NSInteger)和C數(shù)據(jù)類型(int, float, double, char, 等),另外還有id,如:
@property (nonatomic, assign) int number;
@property (nonatomic, assign) id className;//id必須用assign。
//前面不需要加 “*” 的就用assign
retain:用于指針變量。定義了一個變量,然后這個變量在程序的運行過程中會被更改,并且影響到其他方法。一般是用于字符串( NSString,NSMutableString),數(shù)組(NSMutableArray,NSArray),字典對象,視圖對象(UIView ),控制器對象(UIViewController)等,比如:
@property (nonatomic,retain) NSString * myString;
@property (nonatomic, retain) UIView * myView;
@property (nonatomic, retain) UIViewController * myViewController;
strong和weak:現(xiàn)在版本貌似都用的是strong和weak。
ARC環(huán)境下:strong代替retain.weak代替assign
@property(nonatomic,strong) MyClass *myObject 等價于 @property(nonatomic,retain) MyClass *myObject;
@property(nonatomic, weak )id<RNNewsFeedCellDelegate>delegate 等價于 @property(nonatomic,assign )id<RNNewsFeedCellDelegate>delegate;
copy:retain 是指針拷貝,copy 是內(nèi)容拷貝。
@synthesize
我們使用@property定義屬性之后,如果我們想修改這個屬性的名稱,就可以使用@synthesize關鍵字來對屬性名稱進行修改。
補充
@property用在 .h 頭文件中用作聲明,@synthesize用在.m 文件中用于實現(xiàn)。
@property的作用是定義屬性,聲明getter,setter方法。(注意:屬性不是變量)
@synthesize的作用是實現(xiàn)屬性的,如getter,setter方法。
在聲明屬性的情況下如果重寫setter,getter,方法,就需要把未識別的變量在@synthesize中定義,把屬性的存取方法作用于變量。
寫在后面
如果有哪些不對的地方,請斧正!