2014-02-15 20 views
2

我目前正在使用最新版本的Xcode(v5.0.2),我的應用程序有iOS 7.0的部署目標。iOS 7開發 - @synthesize不自動創建ivars

我的問題是,在什麼課沒關係,我可以在頭設置屬性

例如:@property (strong, nonatomic) NSString *firstName;

在實現文件

,我可以合成它只是罰款

例如: @synthesize firstName;

我的問題是我不能在代碼中使用_firstName。我已經在其他項目中使用了自動ivars(屬性名稱以下劃線開頭)。

Xcode抱怨並告訴我將其更改爲不帶下劃線的屬性名稱。我不明白爲什麼這個項目不會自動創建帶有下劃線的ivars。我知道在Objective-C的老版本中,你必須自己做這件事,但你不適用於iOS 7.

謝謝!

回答

5

您可以完全跳過@synthesize,它會創建下劃線的ivars。如果您在沒有指定變量名稱(@synthesize firstName = _firstName;)的情況下執行@synthesize,它將創建不帶下劃線的變量。

+0

如果答覆您的問題,請單擊複選標記以接受答案。 –

2

跳過@synthesize這對你的情況會很好。既然你使用了新的XCode版本,在這種情況下你並不需要這個。請看similar question(和this one)。

2

不要打擾使用@synthesize(除非它是NSManagedObject子類)。但是,無論如何,你應該直接使用伊娃。在你的init方法之外,你應該總是使用self.firstName。

+0

我會說「在init之外,dealloc和getter/setter方法」。 – occulus

3

@synthesize你的財產

創建伊娃在這一行

@synthsize firstName = otherName;

其中firstName是你的財產的名稱,而otherName是你的伊娃名字

在你行

@synthesize firstName; === @synthesize firstName = firstName;

所以財產和伊娃是相同的這是firstName

如果你沒有寫任何@synthesize

那麼編譯器會將

@synthesize firstName = _firstName;

其中firstName是屬性名稱,_firstName是伊娃的名稱