關於dismissViewControllerAnimated值得注意的一點(deinit)

流火行者發表於2015-07-16

  在使用dismissViewControllerAnimated退出當前檢視的時候,理論上,該檢視物件就會被清除了,

也就是說會進去當前類的解構函式deinit裡面。但是有時候會發現,dismiss之後並沒有進入析構,往往就會因此出現一些奇怪的現象

有時候沒有出現問題,也不能代表,我們就可以不管它了。

  之所以沒有進入析構,是因為當前物件包含了沒有釋放的委託存在。比如我這個檢視在開啟之後,關聯了這個委託事件

這種情況下,你在dismiss之後無論如何也進入不了析構,所以你需要在dismiss之前手動釋放掉所有的委託,具體到上面的例子,就是說在執行dismissViewControllerAnimated之前必須加一行程式碼

這樣就能在退出的時候釋放掉所有資源,避免釋放不乾淨,記憶體溢位等情況發生。

這應該是swift中的一個bug,理論上應該在退出檢視的時候,自動釋放掉所有資源,不應該讓程式設計師來手動幹這個事情。

 

相關文章