要做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 中有著特殊的含義,這在後面將會看到。
摘自 TQUDING的專欄