1. @interface 和 @implementation

OC中的類必須包括兩部分,interface部分和implementation部分,這才是oc中的一個(gè)類的完整聲明;
OC中將成員變量和成員方法的聲明部分放置在interface部分中,包括繼承關(guān)系,protocal實(shí)現(xiàn)關(guān)系,都在interface里面的頭部進(jìn)行聲明,
然后將實(shí)現(xiàn)部分放置在implementation部分中,相當(dāng)于是將類拆分成聲明和實(shí)現(xiàn)兩部分,這兩部分缺一不可,所以在OC中,不妨不要將interface叫做接口,直接叫做類聲明部分來得容易理解多了,簡(jiǎn)而言之,oc中interface是類的一個(gè)部分,和implementation共同組成一個(gè)完整的類。
2.@property 和@synthesize
@property關(guān)鍵字
@property 關(guān)鍵字可以自動(dòng)生成某個(gè)成員變量的setter和getter方法的聲明
@property int age;
編譯時(shí)遇到這一行,則自動(dòng)擴(kuò)展成下面兩句:
(void)setAge:(int)age;
(int)age;
@synthesize關(guān)鍵字
@synthesize關(guān)鍵字幫助生成成員變量的setter和getter方法的實(shí)現(xiàn)。
語法:@synthesize age=_age;
相當(dāng)于下面的代碼:
-(void)setAge:(int)age {
_age=age;
}
- (int)age {
Return _age;
}
聲明屬性時(shí)的寫法,總結(jié)出來有三中方式,不知道哪一種比較規(guī)范化,現(xiàn)在我把三種方式貼出來,然后再一一探討每個(gè)方式聲明屬性的區(qū)別。
- 方式一:直接在@interface中的大括號(hào)中聲明。
@interface MyTest : NSObject{
NSString *mystr;
}
使用方式一聲明的成員變量是只能在自己類內(nèi)部使用的,而不能在類的外部使用,(就是通過 類名. 點(diǎn)的方式是顯示不出來的).
- 方式二:在@interface中聲明,然后再在@property中聲明。
@interface MyTest : NSObject {
NSString *_mystr;
}
@property (strong, nonatomic) NSString *mystr;
// 隨后在.m文件中加入
@synthesize mystr = _myStr;
方式二的寫法是一種過時(shí)的聲明變量的方式,xcode在早期@systhesize沒有自動(dòng)合成屬性器之前,需要手寫getter與setter方法,下劃線從風(fēng)格上表明這是類的內(nèi)部變量,要是需要直接使用變量則需要使用get或者set的方式。
- 方式三:直接用@property聲明
@interface MyTest : NSObject{
}
@property (strong, nonatomic) NSString *mystr;
// 隨后在.m文件中加入@synthesize mystr = _myStr;
方式三,它可以在類的外部訪問,在類的內(nèi)部可以通過下劃線+變量名或者self.變量名的方式來訪問。
在XCode目前有了自動(dòng)合成屬性器后,編譯器會(huì)自動(dòng)幫我們生成一個(gè)以下劃線開頭的的實(shí)例變量,所以我們不必去同時(shí)聲明屬性與變量。 我們可以直接用@property的方式來聲明一個(gè)成員屬性,在.m文件中使不使用@systhesize都無所謂,xcode會(huì)自動(dòng)幫你生成getter與setter.
個(gè)人比較喜歡使用方式三的方式,這是是蘋果開發(fā)模板所推薦的,也可以在.m文件中不加@systhesize看個(gè)人喜好吧。