學習java的JDBC,成員變量的setter和getter,eclipse都能幫我們自動生成;當然xcode這款編譯器也很強大,也能自動生成;
1:@property
@property是寫在類的聲明中的,具體寫法;
@interface Person : NSObject
{
_age;
}
@property int age; // 這句話相當于下邊的getter和setter,但是注意age沒有'_',但是就是為有下劃線的age生成的,這樣友善了點文法的調用;
// - (void)setAge:(int)age;
// - (int)age;
@end
是以寫法:@property (成員變量的類型) 去掉下劃線的成員變量名
2:@synthesize:setter和getter方法的實作,在implementation中;
@implementation
@synthesize age = _age; // 注意格式,等号左邊表示實作age的setter和getter,即 setAge 和 age; 等号右邊表示通路那個成員變量;
// 代替了下面這兩個方法;
/*
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
*/
@end
3:@property @synthesize後邊可以同時并列多個成員變量,前提是這幾個成員變量的類型一樣
// @property寫法
@property int age, weight; // 以逗号分隔,前提是age和weight都是int型的;
// @synthesize寫法
@synthesize age = _age, weight = _weight;
4:如果自己沒有明确的定義成員變量,比如_age,然後寫了@property int age;這句話會自動為我們生成_age這個成員變了,但是它的通路權限是private的
5:現在版本的@property功能更強大,獨攬了setter和getter的聲明和實作;可以隻寫@property,而不用寫@synthesize,xcode也會自動生成setter和getter的聲明與實作,并且你也可以不用定義成員變量,它也能自動為我們生成帶有下劃線的成員變量,隻不過是private的;
@interface Student : NSObject
@property int age; // 這句話做了3件事
/*
1:為我們生成了_age這個成員變量,private的;
2:聲明了age得setter和getter方法;
3:在implementation中實作了setter和getter
*/
@end
@property @synthesize的使用注意;
如果@synthesize age; 這樣寫 他會通路的時和age同名的成員變量,不會通路_age; 如果沒有age,他會自動生成@private的age;
方法也是一樣,如果setter和getter我們自己寫了,它會優先用我們自己寫得,如果沒有,它才會自動生成;xcode的特性就是這樣,優先選擇我們自己寫得,如果我 們沒寫,它才自動生成;
id
萬能指針,能指向任何OC對象,定義方式:id d = [Person new];注意定義時不要加*;如果說OC中所有的類都繼承了NSObject,那麼id相當于: NSObject *;