標籤:
1.類裡面經常有一些變數需要進行set和get操作,OC中提供了方便的屬性@property來替換set和get方法,這樣能減少頻繁且簡單的重複代碼。如下代碼:
@interface Person : NSObject@property NSString* strName;@property int nAge;@end
@implementation Person@synthesize strName;@synthesize nAge;@end
通過在類聲明變數前面添加@property表明這個變數是個屬性變數@property NSString* strName,在類實現裡面添加@synthesize讓XCode為你產生編譯代碼@synthesize strName。實際上xcode編譯器會在編譯的時候自動為這個屬性添加set和get方法,如上面例子中的StrName在類裡面添加了方法setStrName和strName,我們可以通過方法設定和訪問strName。但是方便的方法是通過.來訪問。
@autoreleasepool { // insert code here... Person* p = [[Person alloc] init]; p.strName = @"52xpz"; p.nAge = 16; NSLog(@"name:%@, age:%d", p.strName, p.nAge); NSLog(@"name:%@, age:%d", [p strName], [p nAge]); [p setStrName:@"akon"]; [p setNAge:18]; NSLog(@"name:%@, age:%d", p.strName, p.nAge); NSLog(@"name:%@, age:%d", [p strName], [p nAge]); }
[email protected]有一些可選項,比如copy(複製),retain(保留)、readonly(唯讀)、readwrite(可讀寫)、nonatomic(不要原子話訪問)、assign(簡單地賦值)。
屬性預設是assgin和nonatomic選項。下面代碼聲明了strName為copy, readwrite;eye為retain, readwrite, nonatomic。方便啊!
@interface Person : NSObject@property (copy, readwrite) NSString* strName;@property int nAge;@property (retain, readwrite, nonatomic) Eye* eye;
@end
如何不讓編譯器為我們產生屬性代碼而是用自己的代碼呢?答案@dynamic關鍵字。
@interface Person : NSObject@property (readonly) int nAge;@end@implementation Person@dynamic nAge;-(int) nAge{ return 10;}@end
3.關於屬性的選擇個人認為有一下幾個原則:
1)set和get只要一個參數設定變數用屬性,有兩個及以上參數設定變數不應該用。
2)代碼都是簡單地設定和擷取變數應該用屬性,減少代碼量的同時代碼簡單、可讀性好。
Objective-C基礎5 : 屬性@property