2017-05-07 98 views
0

我只花了一個小時試圖修復我的代碼中的保留週期。這基本上是視圖控制器在解散後沒有被釋放。Xcode Instruments無法檢測強代表類型的保留週期?

但是,當我使用儀器檢查內存泄漏時,它通過了每次泄漏檢查。請看下面的圖片。

Instrument Leak Checks

的問題是,當我宣佈類協議,我忘了標註委託作爲弱......但是怎麼來的儀器沒有注意到這個保留週期?

我對內存管理相當陌生,如果我的問題是愚蠢的,請理解。謝謝。 :)

+1

是的,強大的參考週期(通常)不會被泄漏工具檢測到。查看http://stackoverflow.com/questions/30992338/how-to-debug-memory-leaks-when-leaks-instrument-does-not-show-them/30993476#30993476查找這些問題的其他技術。 – Rob

+0

@Rob很棒的回答!謝謝!對於重複的問題抱歉。 –

回答

0

儀器以相當簡單的方式檢測泄漏 - 如果沒有引用來自實例的根組件(稱爲「應用程序委託」),則意味着實例和保留它的所有實例都是內存泄漏,就像垃圾收集器。因此,如果你的父ViewController只保留了另一個ViewController(它應該已經被釋放回來),並且父ViewController仍然由任何在根組件引用鏈中的類保留,它不被認爲是泄漏。

+0

你怎麼知道分析如何工作?你有參考/文檔嗎? –

+0

@Basheer_CAD,這些結論是基於我自己的實證經驗,如果我錯了,隨時糾正我! –

+0

@AleksandrMedvedev是正確的,因爲沒有引用的分配內存是內存泄漏的定義。要查找保留週期,您需要查看Instruments的「All Heap&Anonymous VM」部分。可視化內存調試也可能有所幫助。 – BergQuester