本章的學習筆記以本書第六章的例題(兩個分數的加法)為主線展開,逐漸介紹重要的知識點。
Part 1. 合成存取方法
從Objective-C 2.0 開始,可自動生成設定方法和取值方法:通過屬性。
接口檔案:
@interface Fraction : NSObject
@property int numerator, denominator; //分子,分母
實作檔案:
@implementation Fraction
@synthesize numerator, denominator;//告訴編譯器生成一對設定方法和取值方法。
- 通過
指令,就不需要在實作部分生成相應的執行個體變量。@property
- 如果有稱為
的屬性,那麼在實作部分會導緻編譯器自動生成一個設值方法x
和取值方法setX
。x
Part 2. 使用點運算符通路屬性
設值方法
[myFraction setNumerator: ];
[myFraction setDenominator: ];
//等價于
myFraction.numerator = ;
myFraction.denominator = ;
Part 3. 局部變量
将一個分數約分的方法:
-(void) reduce
{
int u = numerator;
int v = denominator;
int temp;
//u,v,temp 局部變量
while (v!=)
{
temp = u % v;
u = v;
v = temp;
}
numerator /= u;
denominator /= u;
}
- 其他方法無法通路reduce方法的局部變量
- 預設初始化為nil,當方法傳回的時候,變量的值都消失了;執行個體變量在多次方法調用時保持自己的值
Part 4. self 關鍵字
self關鍵字的用途:在方法内直接指明消息的接受者(是對象)。
-(void) add: (Fraction *) f
{
numerator = numerator * f.denominator + denominator * f.numerator;
denominator = denominator * f.denominator;
[self reduce]; //進行約分。 self 作為aFraction的引用,分數得到約簡。(main函數中,計算對象 aFraction 和 bFraction的和,将結果直接約分)
}
Part 5. 将對象作為參數
- 方法聲明:
//add:方法的參數是Fracion類對象的一個引用。當傳遞一個對象作為參數時,實際上是傳遞了一個資料存儲位置的引用。
-(void) add: (Fraction *) f; //将分數與分數相加
- 方法展開:
-(void) add: (Fraction *) f
{
numerator = numerator * f.denominator + denominator * f.numerator;
denominator = denominator * f.denominator;
}
不能用這種方法直接指定參數f的執行個體變量。而是通過名字f辨別這個對象,然後通過對f應用點運算符來獲得執行個體變量。
Part 6. 将對象作為方法的傳回值
在方法中建立新的分數(對象)來存儲相加的結果并向消息的發送者傳回新的Fraction
//傳回一個對象。參數是對象。
-(Fraction *) add: (Fraction *) f
{
//建立新的對象存儲相加後的結果
Fraction *result = [[Fraction alloc] init];
//對象result裡面自動生成了numerator 和 denominator
result.numerator =numerator * f.denominator + denominator * f.numerator;
result.denominator = denominator * f.denominator;
[result reduce]; //對相加的結果約分
return result; //傳回值
}