2013-02-02 41 views
2

我在iTunesU課程中觀看了美妙的Paul Haggerty for iOS開發(導致誰不需要刷新基礎知識?),他說了一些我不知道的內容:在ios中使用@synthesize應用程序

「我們永遠不會訪問下劃線(_符號)變量」

然後,他接着談如何當您使用@財產來聲明變量,​​被這就是幕後生成的代碼由編譯器,以及二傳和吸氣。本質上,代碼永遠不會出現在你的應用程序中。

在所有我迄今寫我的iOS應用,我始終聲明用我的頭文件@property@synthesize VARIABLE_NAME = _VARIABLE_NAME;我的變量,因爲看演講,我現在困惑,我是否應該在使用@synthesize我代碼。

我應該只使用屬性聲明嗎?如果我在代碼中使用合成聲明,它有什麼不同?

既然哈格蒂先生不使用它,那我爲什麼呢? (考慮到他是iOS的半神)。我非常覺得做我一直在做的事情是不好的形式。

有人在乎澄清這個問題嗎?

+1

備份變量合成是自動的,因此@synthesize已被有效地棄用。真的,你只需要聲明一個支持iVar的名字而不是自動合成的名字(反正這是一個糟糕的做法)。刪除他人全部,並清理你的變量訪問。什麼都不應該改變 – CodaFi

+0

可能重複[自動@synthesized屬性在Xcode 4.4](http://stackoverflow.com/questions/11666008/automatically-synthesized-properties-in-xcode-4-4) – CodaFi

+0

@CodaFi,什麼是支持變量? –

回答

7

Xcode 4.0 Developer Preview 4 Release Notes.添加屬性的默認自動合成(iOS和64位OS X)。您不需要編譯器的實現部分中的@synthesize指令來合成已聲明屬性的訪問器。

所以,如果你忽略它

@synthesize ivar = _ivar; 

是完全一樣的。

+1

那真是太棒了。真的很高興知道這一點。 Upvote如果你想;) – barndog

+0

@shadow抱歉,一些錯誤的信息只是檢查發佈說明,發現它自4.0以來就存在。希望你檢查這些注意事項:)(編輯我的答案) –

+0

好棒!是的,我想知道這是怎麼回事,因爲我看到的所有代碼,github上的東西以及whatnot都使用了合成聲明。蘋果真的需要更加開放地瞭解他們的變化,而不僅僅是WWDC:P – barndog

2

不再需要合成。今年的WWDC會議也討論了這一點。只需使用屬性。

+0

有時你必須:http://stackoverflow.com/a/14658336/412916 – Jano

+0

有趣的..很高興知道... – Rob

2

不包括「@synthesize VARIABLE_NAME = _VARIABLE_NAME」將執行完全相同的事情,因爲如果您不添加任何內容,編譯器會自動添加它。

2

使用Xcode 4.5或更高版本。 IDE爲您寫入@synthesize聲明。

@synthesize聲明僅爲您編寫settergetter

that,_variable_name是即時變量。

variable_name只是一種默認情況下返回值_variable_name的方法。

默認情況下使用variable = <Statement or value>. its calling the setVarable_Name method to set the _variable_name`時。

希望它有幫助。

相關問題