在目標c中,我應該覆蓋init方法來初始化我的變量嗎?如果變量是屬性,我仍然可以通過常用的方法設置它們的初始值嗎?我應該在哪裏初始化目標c中的變量?
回答
在目標c中,是否應該覆蓋init方法來初始化我的變量?
是的。具體而言,指定的初始化器(多個)。
你的子類還可以指定另一個構建階段(例如viewDidLoad)。此外,對象的內存在分配時被清零,所以你不需要明確地將它們設置爲0/nil(除非你發現它更易讀)。
如果變量是屬性,我仍然可以訪問它們通常的方法來設置它們的初始值?
您應該避免使用對象的實例方法/訪問器,並直接在部分構造的狀態(特別是初始值設定項和dealloc)中訪問ivars。有一些你會想要避免的副作用 - Example Here;
你可以在視圖控制器的viewDidLoad方法中初始化你的變量。
我應該覆蓋init方法來初始化我的變量嗎?
實例變量:是的,雖然它們默認已經初始化爲0/nil/false。
如果變量是屬性,我仍然可以訪問它們通常的方法來設置它們的初始值?
是的,你可以。 Apple建議不要這樣做,因爲子類會覆蓋設置的存取器以執行某些意想不到的事情。在實踐中,這很少是一個問題。
在類接口中聲明的變量會自動初始化爲默認值,0爲整數值,nil/NULL爲類和指針。如果你需要將變量初始化爲其他值,那麼你需要爲你的類覆蓋一個保證的入口點。例如,繼承自NSObject
的自定義類將簡單覆蓋init
。如果您正在使用從NIB
文件加載的視圖控制器,那麼您可以覆蓋initWithCoder:
或– awakeFromNib
。您應該始終檢查您所繼承的任何類的文檔,並查找該類的指定初始化程序。有時你需要設置一個通用的初始化方法,並從各種初始化器調用它。另外如果你有一個也是屬性的變量,建議你應該直接設置屬性而不是變量。
另外,如果您有一個也是屬性的變量,建議您應該直接設置屬性而不是變量。爲什麼? – onmyway133
- 1. 我應該在哪裏初始化OO遞歸下降分析樹的變量?
- 2. 我應該在哪裏分配/初始化我的ivar?
- 3. 我應該在哪裏放置我的初始化代碼?
- 4. Java - 我應該在哪裏初始化變量以提高內存效率?
- 5. 初始化後未初始化的全局變量的位置在哪裏?
- 6. 在哪裏初始化我的TableView DataController?
- 7. AS3中初始化類變量的「適當」位置在哪裏
- 8. 在哪裏初始化角4組件中的變量 - ExpressionChangedAfterItHasBeenCheckedError
- 9. 在哪裏初始化TempData
- 10. 在哪裏初始化onLongClickListener
- 11. JSP在哪裏初始化?
- 12. os.environ初始化在哪裏?
- 13. 我在哪裏初始化NSMutable Dictionary?
- 14. C#初始化變量
- 15. C#:初始化類變量
- 16. C#λ變量初始化
- 17. C變量未初始化
- 18. 在c中初始化變量#
- 19. 在c#中初始化對象變量?
- 20. 在我的整個應用程序中需要在哪裏初始化zend應用程序中的變量?
- 21. 在哪裏初始化Django會話變量?
- 22. 我應該在哪裏初始化Android動態壁紙的資源
- 23. C++在哪裏初始化靜態常量
- 24. C++中非初始化變量的值
- 25. C++中的變量初始化
- 26. 在C初始化的全局變量++
- 27. 初始化列表中的目標C
- 28. 我應該如何初始化這個變量以用於jQuery?
- 29. 我什麼時候應該初始化Golang變量
- 30. Python - 應該在__init__中初始化所有成員變量
你應該用你自己的方法來覆蓋init方法(如果你使用'init'),但總是在你自己的body之前調用'super'版本。如果您正在編寫視圖控制器,則可以在viewDidLoad中初始化變量。初始化變量時可能(或可能不)很重要。 –