Re: [問題] property 與 synthesize

看板MacDev作者 (B1ack3y3)時間11年前 (2013/01/23 16:19), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串2/3 (看更多)
雖然寫了一段時間了, 但一直以來都是可以動就好.. 一直到最近才開始研究"為什麼", 來野人獻曝一下順便給人指正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
自動補synthesize是從Xcode 4.5開始的
01/23 17:10, 2F

01/23 20:28, , 3F
應該是 LLVM 4.0 。Xcode 4.4
01/23 20:28, 3F
文章代碼(AID): #1G_vpqp4 (MacDev)
文章代碼(AID): #1G_vpqp4 (MacDev)