2011年11月9日 星期三

(Objective C) @property 基本篇

這篇是 @property 最基礎的說明

Objective C 的物件變數都是 Protected
若是要讓外部存取變數,必須經過 Setter/Getter 的做法
(程式設計有講解 Setter/Getter)

@property 則是用來方便程式設計師設定 Setter/Getter

ex:

@interface CarData : NSObject {
     int energy;
     int maxEnergy;
}

@property (nonatomic, assign) int energy;
@property (nonatomic, assign) int maxEnergy;

@end

// 這邊會根據 class 所設定的 @property 產生相對應的 Setter/Getter
@synthesize energy, maxEnergy;

在這邊,它就會自動產生
- (void)setEnergy:(int)value;
- (int)getEnergy;
- (void)setMaxEnergy:(int)value;
- (int)getMaxEnergy;

內容會因 @property 設定的 assign、retain 之類的不同而有所改變,此處先不說明

偶後,外部函式、物件若是要使用此物件的變數
便可以經過以下的方式存取

[car setEnergy:10];
int energy = [car getEnergy];
[car setMaxEnergy:20];
int maxEnergy = [car getMaxEnergy];

但這樣寫不是很直覺,為了讓 Setter/Getter 能跟一般函式分的清楚
Objective C 提供了點運算子的用法

[car setEnergy:10] ==> car.energy = 10;
int enerygy = [car getEnergy]; ==> int energy = car.energy;
[car setMaxEnergy:20] ==> car.maxEnergy = 10;
int maxEnergy = [car getMaxEnergy]; ==> int maxEnergy = car.maxEnergy;

要判斷 car.xxxxx 點運算子是 Settger 還是 Getter,是依據它所使用的狀況
如果變數是被賦予值,那就是 Setter
car.enery = 10; // energy 被賦予 10 的值
如果變數是取值,那就是 Getter
int energy = car.energy; // 取出 car.energy 變數存進 energy 變數

在這邊
點運算子是方便程式設計師使用的東西,不要跟 Selector 的 [ ] 搞混了

沒有留言:

張貼留言