我看到奇怪的行爲與分配儀器在Xcode 8和Swift 2.3。我有一個被調用的對象(A),除了一個引用被釋放的對象之外,其他所有對象都被釋放(不是一個單獨的內存問題,據我所知),但對象繼續被列爲「現場」並持續存在於撥款文書中。此外,當我嘗試調試它的保留,我看到的是:Deinit叫對象仍然在內存中
- 添加打印線到DEINIT方法:
請注意,我已經證實DEINIT正在被執行
- 添加斷點到DEINIT方法
- 驗證是否A引用被解除分配的其它對象,它們收到聲稱
A.__deallocating_deinit
的內部發生的釋放(-1)的引用計數方法
然而,由於一些未知的原因,它似乎堅持。
確定,有可能對象沒有其他參考?根據ARC,對象將不會被釋放,直到引用計數爲0.因此,您可能會保持對該視圖的引用(在其他VC中)。 – Janmenjaya
如果deinit被調用(並且已經返回),那麼該對象幾乎肯定會消失,不管它引用的東西是否還在。通常如果你看到這樣的問題,那就是你不期待的對象的第二個副本。 (「你還沒有預料到的第二個副本」實際上是各種看似不可能的行爲的原因。)檢查內存地址。但是我要尋找的另一件事是,你是否意外地將對象保留在'deinit'中。這會讓你陷入一片混亂(但仍然*可能*不會導致這種症狀;我打賭額外的副本)。 –
@RobNapier我確實確認實際上只有一個對象正在創建。 「deinit」正在執行中,仍然沒有釋放對象。雖然我仍然不明白爲什麼會出現這個問題,但我在下面添加了答案,最終爲我解決了這個問題。 –