我想知道,如果它是實現每個視圖控制器上的deinit
檢查它是否是當它消失,避免了內存泄漏正確刪除一個好的做法呢?當他們不再需要,以騰出資源Deinit是在viewControllers上實現它的好習慣嗎?
回答
默認情況下,你不必須實現deinit
方法在你的類:
斯威夫特自動將釋放你的情況下,當他們不再需要 ,以釋放資源。迅速通過自動引用計數(ARC)處理 實例的存儲器管理,如在 自動引用計數說明。通常你不需要當你實例釋放執行 手動清除。但是,當您使用自己的資源時,您可能需要自行執行一些額外的清理。例如,如果您創建一個自定義類 打開一個文件,寫一些數據,你可能需要關閉 文件中的類的實例被釋放之前。
斯威夫特去初始化文件 - How Deinitialization Works節。
通常,在使用View Controllers時,似乎不需要做這樣的實現。然而,如在@rmaddy的評論中提及,但它仍然是用於跟蹤內存泄漏或基準週期與視圖控制器的方法。
如果您的目的是檢查控制器是否已從層次結構(視圖控制器生命週期)中刪除,則可以實施viewWillDisappear(_:)或viewDidDisappear(_:)方法;請注意,調用這些方法對不不保證了deinit
將被調用,即它並不意味着永遠消失視圖控制器導致釋放它(相關:Deinit never called,explanation for deinit not called)。
另外:
這些問與答&如應該是有用的:
tl; dr - 是的,使用'deinit'是驗證您沒有視圖控制器的內存泄漏或參考週期的一種方法。 – rmaddy
@rmaddy謝謝你的提示,回覆更新。 –
斯威夫特會自動回收您的實例。所以要添加deinit
你所有的viewControllers
似乎沒有必要。無論何時您需要在釋放對象之前執行一些操作或清理,您都應該調用deinit
。
那麼在測試階段,它也許好主意,因爲你可以檢查,如果一切都很好(比如,如果你有很多完成處理的),但總體來說是不必要的。
- 1. 這是一個很好的習慣嗎?
- 2. 這是不好的編碼習慣嗎?
- 3. 這是使用iframe的好習慣嗎
- 4. 這是不好的編程習慣嗎?
- 5. PhpUnit是一個很好的習慣嗎?
- 6. 重寫ServletContextListener的實現是否是一個好習慣?
- 7. Object.create({}):這是一個好習慣嗎?
- 8. 使用幻數是好習慣嗎?
- 9. 爲CQRS實現打包Masstransit是否是一個好習慣?
- 10. '有'屬性的好習慣嗎?
- 11. 在函數體內的typedef是不好的編程習慣嗎?
- 12. 空旗是壞習慣嗎?
- 13. 這是在Angular JS項目中使用jQuery的好習慣嗎?
- 14. 在Java中的setter中拋出Exception是一個好習慣嗎?
- 15. 在void函數中使用exit是錯誤的好習慣嗎?
- 16. 這是一個在android多線程的好習慣嗎?
- 17. 正在使用i ++(或++ i)真的是一個好習慣嗎?
- 18. php - RAII好習慣?
- 19. 重新拋出異常好習慣嗎?
- 20. 以Zend形式實現狀態元素的好習慣
- 21. Clojure記錄是否是實施IFn的好習慣?
- 22. 在頭文件中定義類是一個好習慣嗎?
- 23. 在php中自動加載類 - 這是一個好習慣嗎?
- 24. 在mod_rewrite中使用雙重定向是一個好習慣嗎?
- 25. 在ContentProvider中使用rawQuery是一個好習慣嗎?
- 26. typedef變量在同一類中。這是一個好習慣嗎?
- 27. 在populator中使用轉換器是一個好習慣嗎?
- 28. 在Neo4J中使用「id」屬性是一個好習慣嗎?
- 29. 邏輯在道旁不是一個好習慣嗎?
- 30. 什麼是分手的好習慣Game1()
絕對不是僅僅用於「檢查某些東西」。而且,對於控制器來說,通常使用自己的生命週期方法是有意義的。 – Sulthan
這是測試/開發/調試的好習慣,但不適用於發佈。一旦你有良好的「記憶衛生」,那麼內存泄漏應該變得罕見/不存在。 –