- Fraction.h
#import <Foundation/NSObject.h> @interface Fraction: NSObject { int numerator; int denominator; } -(void) print; -(void) setNumerator: (int) n; -(void) setDenominator: (int) d; -(int) numerator; -(int) denominator; @end
- NSObject:NeXTStep Object 的縮寫。因為它已經改名為 OpenStep,所以這在今天已經不是那麼有意義了。
- 繼承(inheritance)以 Class: Parent 表示,就像上面的 Fraction: NSObject。
- 夾在 @interface Class: Parent { .... } 中的稱為 instance variables。
- 沒有設定存取權限(protected, public, private)時,預設的存取權限為 protected。設定權限的方式將在稍後說明。
- Instance methods 跟在成員變數(即 instance variables)後。格式為:scope (returnType) methodName: (parameter1Type) parameter1Name;
- scope 有class 或 instance 兩種。instance methods 以 - 開頭,class level methods 以 + 開頭。
- Interface 以一個 @end 作為結束。
- Fraction.m
#import "Fraction.h" #import <stdio.h> @implementation Fraction -(void) print { printf( "%i/%i = %f", numerator, denominator,((float)numerator/(float)denominator)); } -(void) setNumerator: (int) n { numerator = n; } -(void) setDenominator: (int) d { denominator = d; } -(int) denominator { return denominator; } -(int) numerator { return numerator; } @end
- Implementation 以 @implementation ClassName 開始,以 @end 結束。
- Implement 定義好的 methods 的方式,跟在 interface 中宣告時很近似。
- main.m
#import <stdio.h> #import "Fraction.h" int main( int argc, const char *argv[] ) { // create a new instance Fraction *frac = [[Fraction alloc] init]; // set the values [frac setNumerator: 5]; [frac setDenominator: 10]; // print it printf( "The fraction is: " ); [frac print]; printf( "\n" ); // free memory [frac release]; return 0; }
- output
The fraction is: 5/10 = 0.500000
- Fraction *frac = [[Fraction alloc] init];
- 在 Objective-C 中呼叫 methods 的方法是 [object method],就像 C++ 的 object->method()。
- Objective-C 沒有 value 型別。所以沒有像 C++ 的 Fraction frac; frac.print(); 這類的東西。在 Objective-C 中完全使用指標來處理物件。
- 這行程式碼實際上做了兩件事: [Fraction alloc] 呼叫了 Fraction class 的 alloc method。這就像 malloc 記憶體,這個動作也做了一樣的事情。
- [object init] 是一個建構子(constructor)呼叫,負責初始化物件中的所有變數。它呼叫了 [Fraction alloc] 傳回的 instance 上的 init method。這個動作非常普遍,所以通常以一行程式完成:Object *var = [[Object alloc] init];
- [frac setNumerator: 1] 非常簡單。它呼叫了 frac 上的 setNumerator method 並傳入 1 為參數。
- 如同每個 C 的變體,Objective-C 也有一個用以釋放記憶體的方式: release。它繼承自 NSObject,這個 method 在之後會有詳盡的解說。
沒有留言:
張貼留言