Re: [問題] property 與 synthesize
雖然寫了一段時間了, 但一直以來都是可以動就好..
一直到最近才開始研究"為什麼", 來野人獻曝一下順便給人指正XD
※ 引述《MisterX (" X " 先生)》之銘言:
: 最近剛進入object C
: 遇到了property與synthesize這兩個新的東西
: 目前對這兩個新東西的認知是“總是一起出現的”
: 也就是說在interface中使用property宣告某個變數 x
: 然後在implmentary中再打上@synthesize x
: 則會自動幫我們產生一對setX與X (setter與getter)
: 現在我的問題是:
: 1.property與synthesize一定是同時使用的嗎?
: 有沒有個別使用的意義或是機會?
property:讓你可以使用dot operator
synthesize: 自動幫你生成getter與setter
在之前的iOS3版本, 你可以只寫property不寫synthesize, 然後自己在.m當中
撰寫getter與setter。但一直以來的慣例就是property與synthesize通常都是成對出現。
至於不寫property, 只寫synthesize...也可以,但我沒用過XD
: 2.會有上面的問題,是因為我在練習寫code時候只寫了@property int x
: 卻忘了在implmentary中打上@synthesize x,卻也可以正常執行setX與X
: 來存取變數(我沒有自己實做set與get)
Xcode不知道4.x之後, 就會自動在編譯時期生成synthesize了。
至於為什麼改成這樣, 因為在.m中加上synthesize已經是慣例, 所以apple在某次改版
Xcode時就自動幫我們加上這功能了。
: 問題有點奇怪,希望板上有前輩可以瞭解我的描述,謝謝
在iOS 3.x的時候, .h與.m的寫法通常是這樣
BMI.h
@interface BMI : NSObject {
NSNumber *_weightNumber;
NSNumber *_heightNumber;
}
@property (nonatomic, retain) NSNumber *weightNumber;
@property (nonatomic, retain) NSNumber *heightNumber;
@end
------------
BMI.m
@implemantation
@synthesize weightNumber = _weightNumber;
@synthesize heightNumber = _heightNumber;
...
...
...
@end
而synthesize會幫我們生成什麼樣的setter與getter呢?
- (void)setWeightNumber:(NSNumber *)weightNumber {
...
...
_weightNumber = weightNumber; //就是這道光!!
}
getter就不寫了, 不過關鍵同樣是 return _weightNumber;
------------
這樣的寫法我一直從3.x寫到5.x (但好像在5.x就不需要宣告instance variable, 直接
使用property, xcode就會依照property幫我們補上instance variable。
就知道我根本沒有在follow...遮臉)
所以apple幫我們改進Xcode的順序是這樣
要宣告instance variable、property、synthesize
↓(宣告iVar是慣例了, 幫我們省略掉)
只要宣告property, synthesize
↓ (宣告synthesize是慣例了, 再幫我們省略掉)
只要宣告property
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.88.225
→
01/23 16:23, , 1F
01/23 16:23, 1F
→
01/23 17:10, , 2F
01/23 17:10, 2F
推
01/23 20:28, , 3F
01/23 20:28, 3F
討論串 (同標題文章)