2012-05-22 70 views
1

在目標c中,我應該覆蓋init方法來初始化我的變量嗎?如果變量是屬性,我仍然可以通過常用的方法設置它們的初始值嗎?我應該在哪裏初始化目標c中的變量?

+1

你應該用你自己的方法來覆蓋init方法(如果你使用'init'),但總是在你自己的body之前調用'super'版本。如果您正在編寫視圖控制器,則可以在viewDidLoad中初始化變量。初始化變量時可能(或可能不)很重要。 –

回答

3

在目標c中,是否應該覆蓋init方法來初始化我的變量?

是的。具體而言,指定的初始化器(多個)。

你的子類還可以指定另一個構建階段(例如viewDidLoad)。此外,對象的內存在分配時被清零,所以你不需要明確地將它們設置爲0/nil(除非你發現它更易讀)。

如果變量是屬性,我仍然可以訪問它們通常的方法來設置它們的初始值?

您應該避免使用對象的實例方法/訪問器,並直接在部分構造的狀態(特別是初始值設定項和dealloc)中訪問ivars。有一些你會想要避免的副作用 - Example Here;

1

你可以在視圖控制器的viewDidLoad方法中初始化你的變量。

0

我應該覆蓋init方法來初始化我的變量嗎?

實例變量:是的,雖然它們默認已經初始化爲0/nil/false。

如果變量是屬性,我仍然可以訪問它們通常的方法來設置它們的初始值?

是的,你可以。 Apple建議不要這樣做,因爲子類會覆蓋設置的存取器以執行某些意想不到的事情。在實踐中,這很少是一個問題。

1

在類接口中聲明的變量會自動初始化爲默認值,0爲整數值,nil/NULL爲類和指針。如果你需要將變量初始化爲其他值,那麼你需要爲你的類覆蓋一個保證的入口點。例如,繼承自NSObject的自定義類將簡單覆蓋init。如果您正在使用從NIB文件加載的視圖控制器,那麼您可以覆蓋initWithCoder:– awakeFromNib。您應該始終檢查您所繼承的任何類的文檔,並查找該類的指定初始化程序。有時你需要設置一個通用的初始化方法,並從各種初始化器調用它。另外如果你有一個也是屬性的變量,建議你應該直接設置屬性而不是變量。

+0

另外,如果您有一個也是屬性的變量,建議您應該直接設置屬性而不是變量。爲什麼? – onmyway133