這次,我們介紹objective-c是如何定義乙個完整的類。定義乙個類都包括哪些部分,為了簡單明瞭,更加直接,列舉了乙個20多行**的小例子。
那麼,讓我們先看下面這個簡單的例子:
1
2
3
4
5
6
7
8
9
10
11
#import //引用foundation庫標頭檔案
@inte***ce
fraction:
nsobject
-(
void
) print;
//宣告列印方法
-(
void
) setnumerator:(
int
) n;
//宣告設定numerator引數的帶1個引數的方法
-(
void
) setdenominator:(
int
) d;
//宣告設定denominator引數的帶1個引數的方法
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@implementation
fraction
-(
void
) print
//定義列印方法
-(
void
) setnumerator: (
int
) n
//定義帶引數的setnumerator方法
-(
void
)setdenominator: (
int
) d
//定義帶引數的setdenominator方法
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int
main(
int
argc,
char
*argv)
上述程式執行的結果是:
the value of myfraction is:
1/3從上述**可以看到,程式在邏輯上分為3個部分:
@inte***ce部分用於描述類、類的資料成分以及類的方法;而@implementation部分包括實現這些方法的實際**。最後,program部分包含實現程式預期目的的程式**。
下面展開來討論:
定義新類時,必須做一些事情。首先,要通知objective-c編譯器這個類來自何處。就是說,必須命名它的父類。其次,必須確定這個類物件要儲存的資料的型別。就是說,必須描述類成員將包含的資料。我們把這些成員叫做例項變數。最後,還必須定義在處理該類的物件時將要用到的各種操作或方法的型別。這些工作都在程式中名為@inte***ce的特殊部分內完成。該部分的一般格式類似於:
1
2
3
4
5
6
@inte***ce
newclassname:parentclassname
methoddeclarations;
@end
@implementation部分包含宣告在@inte***ce部分的方法的實際**。就像術語指出的那樣,在@inte***ce部分宣告方法並在@implementation部分定義它們(就是說給出實際的**)。
@implementation部分的一般格式如下:
1
2
3
@implementation
newclassname
methoddefinitions;
@end
newclassname表示的名稱與@inte***ce部分的類名相同。可以在父類的名稱之後使用冒號,如同在@inte***ce部分使用的冒號一樣:
@implementation fraction:nsobject
然而,它是可選的而且通常並不這麼做。
@implementation部分中的methoddefinitions部分包含在@inte***ce部分指定的每個方法的**。與@inte***ce部分類似,每種方法的定義首先指定方法(類或例項)型別、返回型別、引數及其型別。然而,我們並沒有使用分號來結束該行,而是將之後的方法**放入一對花括號中。
program部分包含解決特定問題的**,如果有必要,它可以跨越多個檔案。在這些檔案中,必須在其中乙個地方有乙個名為main的例程。通常情況下,這是程式開始執行的地方。
Objective C 定義的型別
以下列出的是objective c內建的型別集合 型別定義 id物件的引用 指向其資料結構的指標 class類物件的引用 指向其資料結構的指標 sel選標 編譯器分配用來區分方法名的編碼 imp指向方法實現的指標,該實現返回id bool布林值,yes or no nil空的物件指標,id 0 ni...
Objective C 類的擴充套件
category,分類或類目。主要作用是為沒有原始碼的類加入方法。通過category加入的方法會成為原類的一部分。從而達到擴充套件乙個類的功能。定義category過程 新建 件 選擇objective c category模板 填寫類名和分類名 h 件加入 法宣告 m加入 法實現 categor...
在objective c中列印自定義類
nsstring description 是基類nsobject 所帶的方法,在自定義的子類中,我們可以過載該方法來實現列印自定義類。首先,我們可以自定義乙個person類。inte ce person nsobject end implementation person id init retur...