我知道在dealloc中使用setter可能會產生問題,如果任何其他對象正在觀察屬性中的更改。但爲什麼我們不應該在初始化程序中使用它們呢?爲什麼在Objective-C的初始化方法中使用self會是一個好習慣?
5
A
回答
6
不使用-init
中的存取器的唯一原因是您的對象未完全初始化,並且存取器可能依賴於它。如果你有一個覆蓋訪問器方法的子類,這種情況只會發生。
解除分配時存在對稱問題,因爲重寫的訪問器可能依賴於未在部分解除分配的對象上調用。還有一個問題,您可能會發出虛假的KVO通知。
這適用於正確封裝的核心。子類不需要關心超類的實現細節。
8
我從來沒有在初始化器中使用訪問器有任何問題。也許這取決於你在setter和getters中有多少魔法 - 如果訪問器做得太聰明,在初始化器中使用它們時可能遇到麻煩。
現在我想到了,我甚至使用dealloc
中的訪問器。再次,沒有問題。如果有人正在觀察一個物體,他應該確保該物體不會首先被釋放。所以,除非有人提出了一個引人注目的反駁,否則我想你可能會嘗試使用init
和dealloc
中的訪問器,看看它是如何工作的。
相關問題
- 1. 初始化一個變量爲零是好習慣嗎?
- 2. 初始化Ruby類的習慣方式
- 3. 在Javascript中初始化變量的好習慣?
- 4. 在初始編碼期間進行優化是一個好習慣嗎?
- 5. 爲什麼使用XML創建GUI是Android中的一個好習慣
- 6. 初始化Scala ArrayBuffer的慣用方法?
- 7. 在Python類中初始化和使用匯總的最好方法是什麼?
- 8. 什麼是檢查InterruptedException的好習慣?
- 9. 什麼是較好的編碼習慣?
- 10. 爲什麼要在初始化方法中檢查[self class] == [LevelAppDelegate類]?
- 11. 使用memset()初始化全部爲0的動態分配結構是否是一個好習慣,如果是,有什麼好處?
- 12. 靜態初始化良好的編程習慣?
- 13. 定義「我的變量將會是什麼」是一個好習慣嗎?
- 14. 什麼是更好的編碼習慣,使用工具或方法
- 15. 調用存取方法的好習慣?
- 16. PhpUnit是一個很好的習慣嗎?
- 17. 在populator中使用轉換器是一個好習慣嗎?
- 18. 在ContentProvider中使用rawQuery是一個好習慣嗎?
- 19. 使用枚舉爲int是一個好習慣嗎?
- 20. 在$角度使用$ parent是否是一個好習慣?
- 21. 什麼是使用UIAlertView與UIActivityIndicator的好習慣
- 22. 爲什麼我會在java中使用靜態初始化塊?
- 23. 爲句柄寫一個getter是否是一個好習慣?
- 24. 在函數中使用輸出參數時,在函數中初始化它們是否好習慣?
- 25. Object.create({}):這是一個好習慣嗎?
- 26. 在另一個線程中使用線程是否是一個好習慣?
- 27. 在c中初始化指針的正確方法是什麼?
- 28. 在Rails中初始化class_attribute的正確方法是什麼?
- 29. 什麼是在C++ 98中初始化Matrix的正確方法?
- 30. 這是使用iframe的好習慣嗎
人們對Objective-C有各種各樣的「規則」,他們試圖強加於你。如果他們可以安全地忽略大約90%。 – 2012-02-24 13:17:28