Objective-C語(yǔ)法學(xué)習(xí) 初學(xué)者必備文檔
Objective-C語(yǔ)法學(xué)習(xí)是本文要介紹的內(nèi)容,主要介紹了變量、方法、對(duì)象等一些內(nèi)容。我們一起來(lái)看詳細(xì)內(nèi)容。
變量定義
interface 文件(*.h)中定義,定義要放在 interface 名稱(chēng)后的括號(hào)內(nèi)
對(duì)象的定義要用指針[NSButton *aButton;],使用正常名稱(chēng)
普通變量正常定義使用
方法定義
interface 文件(*.h)中定義,定義放在括號(hào)外且 @end 標(biāo)記前
以符號(hào)([-]表對(duì)象方法,[+]表靜態(tài)方法)開(kāi)頭,其次以括號(hào)括起來(lái)的返回值類(lèi)型,然后是方法名稱(chēng),以冒號(hào)開(kāi)始參數(shù)的加入,參數(shù)按正常定義格式,但要把類(lèi)型以括號(hào)括起來(lái),***個(gè)參數(shù)以后的參數(shù)要加標(biāo)志符,以分號(hào)結(jié)束[-(void)testFunction:(NSString *)aString secondPara:(int)aInt;]
方法名以小寫(xiě)字母開(kāi)頭
方法的實(shí)現(xiàn)
implementation 文件(*.m)中定義,文件中先以 import 關(guān)健字引入 interface 文件[#import "MyClass.h"],方法定義在 @implementation和@end關(guān)鍵字之間定義方法,跟定義在interface中對(duì)方法的定義類(lèi)似,但方法的實(shí)現(xiàn)在大括號(hào)之間
方法的參數(shù)是方法的一部分,如果參數(shù)是指針則在使用時(shí)要重新分配內(nèi)存,用后要釋放內(nèi)存,如果是普通變量則正常使用,如:
- -(void)setName:(NSString *)tmpName{
- [tmpName retain];
- [tmpName release];
- tmpName = name;
- }
釋放內(nèi)存操作放在對(duì)tmpName的調(diào)用之后,調(diào)用一個(gè)釋放的方法。
初始化類(lèi)的對(duì)象可以在方法[-(id)init{}]中實(shí)現(xiàn)。
方法及變量的使用
實(shí)例化一個(gè)對(duì)象:先分配內(nèi)存并創(chuàng)建類(lèi)
- {MyClass *anInstance=[MyClass alloc;]}
然后初始化對(duì)象:{[anInstance init]}(調(diào)用了實(shí)例的init方法),則一般實(shí)例化為:
- {MyClass *anInstance =[[MyClass alloc] init];}
以中括號(hào)來(lái)調(diào)用{[object message]},以分號(hào)結(jié)尾
參數(shù)在對(duì)象操作后加入{[object method:para1 labelPara2:para2]},方法可做嵌套,在要使用的地方以同樣的方式調(diào)用即可
調(diào)用同一個(gè)類(lèi)中的其它方法,對(duì)象名用 self
使用實(shí)例直接調(diào)用對(duì)象的變量是可以的,但***通過(guò)方法訪問(wèn)變量
返回值可以正常使用
當(dāng)然用alloc創(chuàng)建了實(shí)例,也要釋放:
- {[anInstance release];}
內(nèi)存自動(dòng)釋放方式
以 stringWithSting 代替 alloc ,可以使系統(tǒng)自動(dòng)釋放內(nèi)存
創(chuàng)建對(duì)象:
- +(id)stringWithString:(NSString *)aString;
- *aString =[NSString stringWithString:@"Hello,World!"]
實(shí)例化對(duì)象時(shí)設(shè)置自動(dòng)回收:
- {MyClass *anInstance=[[[MyClass alloc] init] autorelease];}
一般的語(yǔ)言使用關(guān)鍵字class來(lái)定義類(lèi),而objective-c是使用關(guān)鍵字@interface加上@end來(lái)聲明,用關(guān)鍵字@implementation加上@end來(lái)定義類(lèi)。其二,用類(lèi)的對(duì)象來(lái)調(diào)用該類(lèi)的方法時(shí),一般的高級(jí)語(yǔ)言都是用對(duì)象名加上符號(hào)‘.’來(lái)調(diào)用,但是objective-c是用中括號(hào)把對(duì)象名和所調(diào)用的方法名括起來(lái)調(diào)用。
(1)Objective-C的編譯器處理后綴為m的文件時(shí),可以識(shí)別Objective-C和c的代碼,處理mm文件可以識(shí)別Objective-C,c,c++代碼,但cpp文件必須只能用c/c++代碼,而且cpp文件include的頭文件中,
也不能出現(xiàn)Objective-C的代碼,因?yàn)閏pp只是cpp
(2)在mm文件中混用cpp直接使用即可,所以O(shè)bjective-C混cpp不是問(wèn)題
(3)在cpp中混用Objective-C其實(shí)就是使用Objective-C編寫(xiě)的模塊是我們想要的。
如果模塊以類(lèi)實(shí)現(xiàn),那么要按照cpp class的標(biāo)準(zhǔn)寫(xiě)類(lèi)的定義,頭文件中不能出現(xiàn)Objective-C的東西,包括#import cocoa的。實(shí)現(xiàn)文件中,即類(lèi)的實(shí)現(xiàn)代碼中可以使用Objective-C的東西,
可以import,只是后綴是mm。如果模塊以函數(shù)實(shí)現(xiàn),那么頭文件要按c的格式聲明函數(shù),實(shí)現(xiàn)文件中,c++函數(shù)內(nèi)部可以用Objective-C,但后綴還是mm或m。
總結(jié):只要cpp文件和cpp include的文件中不包含Objective-C的東西就可以用了,cpp混用Objective-C的關(guān)鍵是使用接口,而不能直接使用實(shí)現(xiàn)代碼,實(shí)際上cpp混用的是Objective-C編譯后的o文件,
這個(gè)東西其實(shí)是無(wú)差別的,所以可以用。而Objective-C混用cpp就簡(jiǎn)單了,直接用就可以,因?yàn)?strong>Objective-C的編譯器支持啊
小結(jié):Objective-C語(yǔ)法學(xué)習(xí) 初學(xué)者必備文檔的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!