我知道@synthesize爲一個實例變量自動創建getter和setter。當我指定= _something部分時,我知道這會通知編譯器/運行時我希望它爲getters/setters使用特定的後備變量。@synthesize something = _something;自動創建變量_something呢?
Objective-C是否會自動創建_something變量以及我的getter/setters,還是應該在接口/實現文件中定義該實例變量?
我知道@synthesize爲一個實例變量自動創建getter和setter。當我指定= _something部分時,我知道這會通知編譯器/運行時我希望它爲getters/setters使用特定的後備變量。@synthesize something = _something;自動創建變量_something呢?
Objective-C是否會自動創建_something變量以及我的getter/setters,還是應該在接口/實現文件中定義該實例變量?
問題是頭文件中的@property和實現中的@synthesize是否創建底層ivar或者ivar是否必須在頭文件中列出。例如,在頭文件:
@interface SomeClass : NSObject {
NSString *_someString; // Is this needed???
}
@property NSString *someString;
,並在執行:
@synthesize someString = _someString;
答案是,這取決於你是否使用的是傳統的還是現代的運行時間。在iOS中,您始終使用現代運行時,因此您絕不需要NSString *_somestring
行,但此問題與Mac OS X有關。對於Mac OS X,如果您在Mac OS X 10.5或更高版本上使用64位程序,則正在使用現代運行時,否則你使用的是舊版運行時,並且需要在你的頭文件中增加額外的行。由於發佈了一些錯誤信息,這裏有一個參考:Objective-C Runtime Programming Guide。
非常感謝您澄清這個問題..似乎有很多混淆周圍@synthesize如何工作。 – Brett 2012-07-29 22:20:36
對不起,誤解了你的問題的一部分。如果你使用下劃線來做@synthesize部分,那你就很好。沒有必要明確界定一個伊娃。
這是不正確的。該變量是作爲合成語句的一部分爲您製作的。 – jrturton 2012-07-29 21:08:56
可能重複[什麼是調用點「@synthesize slider = _slider;」](http://stackoverflow.com/questions/7724249/what-is-the-point-of-calling-synthesize-slider -slider) – jrturton 2012-07-29 21:12:02