現在,我們將用Objective-C定義一個實際的類,並學習如何使用類的執行個體。
同樣,我們將先學習過程。因此,實際的程式範例可能不是特別實用,那些更加實際的內容將在稍後討論。
假設要編寫一個用於處理分數的程式,可能需要處理加、減、乘、除等運算。如果你還不知道什麼是類,那麼可以從一個簡單的程式開始,代碼如下:
代碼清單3-1
// 採用分數的簡單程式
#import <Foundation/Foundation.h>
int main (int argc, char * argv[])
{
@autoreleasepool {
int numerator = 1;
int denominator = 3;
NSLog (@"The fraction is %i/%i", numerator, denominator);
}
return 0;
}
代碼清單3-1 輸出
The fraction is 1/3
在代碼清單3-1中,分數是以分子和分母的形式表示的。在@autoreleasepool指令之後,main中的前兩行將變數numerator和denominator都聲明為整型,並分別給它們賦予初值1和3。這兩個程式與下面的程式行等價:
int numerator, denominator;
numerator = 1;
denominator = 3;
將1儲存到變數numerator中,將3儲存到變數denominator中,這樣就表示分數1/3。如果需要在程式中儲存多個分數,這種方法可能比較麻煩。每次要引用分數時,都必須引用相應的分子和分母,而且操作這些分數也相當困難。
如果能把一個分數定義成單個實體。用單個名稱(例如myFraction)來共同引用它的分子和分母,那就會更好。這種方法可以利用Objective-C來實現,從定義一個新類開始。
代碼清單3-2通過一個名為Fraction的新類,重寫了代碼清單3-1中的函數。下面給出這個程式,隨後將詳細介紹它是如何工作的。
代碼清單3-2
// 使用分數的程式——類版本
#import <Foundation/Foundation.h>
//---- @interface 部分 ----
@interface Fraction: NSObject
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
@end
//---- @implementation 部分 ----
@implementation Fraction
{
int numerator;
int denominator;
}
-(void) print
{
NSLog (@"%i/%i", numerator, denominator);
}
-(void) setNumerator: (int) n
{
numerator = n;
}
-(void) setDenominator: (int) d
{
denominator = d;
}
@end
//---- program 部分 ----
int main (int argc, char * argv[])
{
@autoreleasepool {
Fraction *myFraction;
// 建立一個分數執行個體
myFraction = [Fraction alloc];
myFraction = [myFraction init];
// 設定分數為1/3
[myFraction setNumerator: 1];
[myFraction setDenominator: 3];
// 使用列印方法顯示分數
NSLog (@"The value of myFraction is:");
[myFraction print];
}
return 0;
}
代碼清單3-2 輸出
The value of myFraction is:
1/3
從代碼清單3-2的注釋中可以看到,程式在邏輯上分為以下3個部分:
@interface部分
@implementation部分
program部分
其中,@interface部分用於描述類和類的方法;@implementation部分用於描述資料(類對象的執行個體變數儲存的資料),並實現在介面中聲明方法的實際代碼;program部分的程式碼實現了程式的預期目的。
注意
也可以在interface(介面)部分為類聲明執行個體變數。從Xcode 4.2開始,已經可以在implementation(實現)部分添加執行個體變數,這是為了能夠以一種更好的方式來定義類。在後面章節中說明了原因。
以上3個部分存在於每個Objective-C程式中,即使你可能不需要自己編寫每一部分。你會看到,每一部分通常放在它自己的檔案中。然而,目前來說,我們將它們放在一個單獨的檔案中。
本文節選自《Objective-C
程式設計(第4版)》
電子工業出版社出版
[美]Stephen G. Kochan(斯蒂芬·G·科昌)著
林冀
範俊朱奕欣譯