2012-07-29 11 views
0

我知道@synthesize爲一個實例變量自動創建getter和setter。當我指定= _something部分時,我知道這會通知編譯器/運行時我希望它爲getters/setters使用特定的後備變量。@synthesize something = _something;自動創建變量_something呢?

Objective-C是否會自動創建_something變量以及我的getter/setters,還是應該在接口/實現文件中定義該實例變量?

+0

可能重複[什麼是調用點「@synthesize slider = _slider;」](http://stackoverflow.com/questions/7724249/what-is-the-point-of-calling-synthesize-slider -slider) – jrturton 2012-07-29 21:12:02

回答

1

問題是頭文件中的@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

+0

非常感謝您澄清這個問題..似乎有很多混淆周圍@synthesize如何工作。 – Brett 2012-07-29 22:20:36

-2

對不起,誤解了你的問題的一部分。如果你使用下劃線來做@synthesize部分,那你就很好。沒有必要明確界定一個伊娃。

+2

這是不正確的。該變量是作爲合成語句的一部分爲您製作的。 – jrturton 2012-07-29 21:08:56