要做APP的IPHONE版,小組中大家都不會,畢竟IPHONE開發對學生來說門檻還是很高的,主要是硬件成本,一個MAC電腦大約要一萬多,普通人家的孩子根本買不起。所以,只要自己硬著頭皮來學了,也會將學習筆記一一寫出來供大家參考。
首先說說類的定義,在Object-C中必須首先定義一個接口,該接口用於描述這個類的組成,包含成員變量、類變量、類方法、成員方法。接口文件的擴展名為h,也就是定義為C 語言中的頭文件。
下面是一個類的定義,該類完成的功能是使用兩個兩個int型的數字組成一個分數。
Fraction.h
#import <Foundation/Foundation.h>
static int t=0
@interface Fraction: NSObject{
int numerator;//分子
@public int denominator;//分母
}
-(void) setNumerator: (int) numerator;//numerator 的setter 方法
-(void) setDenominator: (int) denominator;//denominator 的setter 方法
-(void) setNumerator: (int) numerator andDenominator: (int) denominator;
//一個同時設置兩個成員變量的快捷方法
-(int) numerator;//numerator 的getter 方法
-(int) denominator;//denominator 的getter 方法
-(void) print;
+(void) t;
@end
一個object c中的接口就是C語言中的一個HEADER文件,這個文件的結構如下:
我們來逐行看一下上面的內容:
(1.) 這裡與C 語言不同的是導入頭文件使用的是import,而不是include。另外與C 語言一樣的地方是如果你想從的地方是如果你想從當前目錄查找Header 文件,找不到就到系統的頭文件庫中查找,請使用#import “Header 文件”,如果你只想從系統的頭文件庫中查找,請使用#import<Header 文件>。Foundation/Foundation.h 包含了Foundation Kit 中的所有的頭文件定義,GNUStep 的Object-C 的Foundation 頭文件在\GNUStep 安裝目錄\GNUstep\System\Library\Headers\Foundation 文件夾。GNUStep 的Object-C 的AppKit 頭文件在
\GNUStep 安裝目錄\GNUstep\System\Library\Headers\ AppKit 文件夾。
(2.) static 標識的類變量定義在接口的外面,類變量只能本類訪問,除非提供類方法給外部
訪問這個類變量。
(3.) Object-C 中的@+指令表示C 語言之外的Object-C 的衍生語法,因此@interface 表示定義了一個接口,接口名稱之後緊跟了一個冒號,冒號後是父類的名字,Object-C 中的頂級父類是NSObject。
(4.) 接口定義之後緊接著一對{ },其中定義了成員變量,所謂的成員變量就相當於JAVA 中的
實例變量,從屬於類的對象。Object-C 中的成員變量使用@public、@protected、@private作為訪問修飾符,默認是@protected。這裡你要知道的是Object-C 中只有成員變量有訪問修飾符,類變量、類方法、成員方法是沒有訪問修飾符的,所有的方法都是public 的,所有的類變量都是私有的。
(5.) 以-開頭的方法為成員方法,以+開頭的方法為類方法,方法中的類型描述(返回值類型、
參數類型)都必須使用( )包圍。如果方法有多個參數,每個參數都有一個標簽名(可以
省略,但不建議這樣做),每個標簽名之後使用冒號與參數描述分隔。在有多個參數的
方法中,實際的方法名稱為 方法名:標簽名1:標簽名2:… …,上面的擁有兩個參數的方
法的方法名為setNumerator:andDenominator:。與JAVA 不同的是Object-C 中的
類方法只能類調用,如果你使用對象調用會報錯,而JAVA 僅僅是在編譯期給出警告。
(6.) 以@end 表示接口定義結束。這是因為與JAVA 不同的是JAVA 的類型定義使用{ }包圍,
而Object-C 中的{ }只包圍成員變量,因此必須有個結束標志,一般JAVA 程序員經常會忘
記寫這個結束標記。
這裡你要知道Object-C 的@interface 與JAVA 的interface 並不是一回事兒,後面你會看到
Object-C 中的@protocol 與JAVA 中的interface 才是等同的。這裡你只需要記住的是Object-C
中的@interface 只是類的一個描述,因為@interface 通常在獨立的h 文件中,你可以把它類
比成C 語言中的函數原型,也就是在Object-C 裡應該叫做類的原型。通過這個原型,編譯
器可以知道具體實現類有哪些功能。
上面的接口中的方法很簡單,主要就是成員變量的setter、getter 方法,這與JAVA 沒有什麼
不同的。但是你會發現getter 方法沒有以get 作為方法名稱前綴,這是因為get 開頭的方法
在Object-C 中有著特殊的含義,這在後面將會看到。