2011-08-31 46 views
4

現在我在Objective-C中已經有5個多月的時間了,我還在App Store中發佈了我的第一個應用程序,但是我仍然對該語言的核心功能有疑問。何時在Objective-C中使用`self`?

什麼時候我應該使用self訪問iVars,當我不是?

當您發佈一個插座,您可以在viewDidUnload中編寫self.outlet = nil,而不是在dealloc中編寫[outlet release]。爲什麼?

回答

6

當您編寫self.outlet = nil時,調用方法[self setOutlet:nil];。當您編寫outlet = nil;時,您直接訪問變量outlet

如果您使用@synthesize outlet;,則自動生成方法setOutlet:,如果您聲明屬性爲@property (retain) NSObject outlet;,則會在分配新對象之前釋放對象。

+1

這裏以英里爲單位的最佳答案。 – JeremyP

1

您在引用@property時使用self。 通常它會被@ synthesize'd。

如果您引用「私有」變量,則不使用自我。通常,我使用UI元素(如UIButtons)的屬性或我想要從其他類輕鬆訪問的元素。 您可以使用@private和@protected修飾符明確實施可見性。但是,您不能使用Objective-C中不存在的私有方法。

關於零,釋放和dealloc的部分與使用「自我」無關。你釋放你保留的東西,你什麼都不是自動保存的。

您應該閱讀Objective-C guide,它寫得很好,非常有啓發性。

+0

-1是有這樣的事,作爲一個私有變量,看'@ private'。你對使用nil,release和dealloc的推理也是不正確的。 'self.foo'是一個屬性。將其設置爲零將釋放其上一個值。 'foo'是一個變量,將其設置爲零會導致舊值泄漏。不同之處在於,將屬性設置爲nil實際上是發送一條消息,導致舊值被釋放。 – JeremyP

+0

@JeremyP你是完全正確的。我的記憶使我失望了:/但是我關於使用零的推理並沒有關閉(我的應用程序不會泄漏),而且我認爲我選擇的單詞正是你自己說的。我可能是一個可憐的解釋者,或者你可能會得出錯誤的結論。無論如何,+1刷新我的私人修改器的記憶。 – Kheldar

+0

我已經刪除了投票,因爲你修正了我投下的票數。我仍然認爲你有使用自我困惑的東西。 – JeremyP

0

您使用自我。當你訪問你所屬的類的屬性時(因此我自己)。基本上,當你想保留一個值時,你使用自己,但只有當你保留在你的財產定義。

版本剛剛發佈了您保留的對象。你不應該釋放你沒有保留的東西,因爲它會導致崩潰(殭屍對象)。

相關問題