1. 程式人生 > >iOS 檢視控制器在退出的時候沒有走dealloc,你需要做的事情

iOS 檢視控制器在退出的時候沒有走dealloc,你需要做的事情

這幾天由於前臺的ui沒有給我圖,所以有點閒,我一直在糾結記憶體優化的問題。

我昨天發現我的導航控制器在pop的時候居然沒有走dealloc方法,我在leaks裡面去執行,也沒有發現記憶體洩漏的提示。但是作為一個合格的程式設計師一定不能允許出現這種情況。所以我開始 一步一步的查詢。

歸根結底,是因為當前控制器被某個物件強引用在控制器pop的時候count沒有減為0,導致控制器的引用計數不為0,系統無法幫你釋放這部分記憶體。

我控制器裡面有通知,塊比較是容易導致強引用,所以我就在這裡面一句一句的去檢查,結果在塊裡面發現了問題。我在塊裡面有一個地方居然呼叫self沒有用他的弱引用形式,所以導致了self的count加一,最後直接導致控制器在pop的時候沒有走dealloc這個方法。

總結了一下控制器被強引用不走dealloc的原因無非就是三中情況:

一.block塊使用不當。因為block會對方法中的變數自動retain一次。請檢查控制器中block程式碼。(我的就是因為這沒有走dealloc)

二.NSTimer沒有銷燬。在viewWillDisappear之前需要把控制器用到的NSTimer銷燬。

三.控制器中的代理屬性一定要是弱引用,不要強引用。