這篇是 @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 的 [ ] 搞混了
沒有留言:
張貼留言