天天看點

【MyBean調試筆記】接口的使用和清理

【DEMO資訊】

   有問題的DEMO, 由芒果送出

【問題描述】

輕按兩下Tab頁面關閉頁面和插件的時候出現AV異常

【MyBean調試筆記】接口的使用和清理

【問題調試】

我們在調試的時候出現這個錯誤時斷點停在這裡

【MyBean調試筆記】接口的使用和清理

可以看到停留在這個位置@IntfClear,指針清理的位置

【MyBean調試筆記】接口的使用和清理

好我們來調試下這個過程,跟一下是什麼時候出現的, 在end 處下個斷點後切換到cpu頁,我們看到在ret之前調用了一過程,這個位址應該是做一些清理工作後然後傳回到調用者位址,

【MyBean調試筆記】接口的使用和清理

跟進去後,一會就跳到錯誤的界面,可以說明在清理時出現的,這個時候我們來看看這段代碼

這段代碼中有一個lvPluginForm為接口IPluginForm變量, 過程在退出時會執行lvPluginForm := nil和其他一些資源的清理工作,清理的時候會觸發對象的__release方法,但是我們看到這個對象已經釋放掉了,然後在進行清理的時候出現了上面看到的通路違規的錯誤。

【問題解決】

找到出現問題的根本,解決起來就很快了,盡量不要等到過程清理時在去清理你的資源,特别是可能通路不存在的資源。在end;之前 加一句lvPluginForm := nil;這樣就好了