deleteLater() 用於延遲異步、徹底刪除 QObject 對象。
在 PyQt PySide,有時必需使用 deleteLater() 稍後刪除,而不是使用 del 刪除語句 (或 delattr 刪除屬性內置函數) 來刪除 QObject 對象。
因為 del 刪除語句 (或 delattr 刪除屬性內置函數) 隻是刪除瞭 QObject 對象的引用,並沒有徹底刪除對象,導緻該對象仍始終存活,尤其是在 linux 平颱。
注意: 在 PyQt PySide, 並不是所有 QObject 對象的刪除,都要調用 deleteLater() 稍後刪除公共槽 (一般來說,是盡可能使用 Python 虛擬機的自動垃圾迴收機製)。
當 QThread 綫程實例 self.threadObject 先調用 quit() 離開槽, 再使用 self.threadObject.deleteLater() 稍後刪除公共槽、del self.threadObject 形式語句、或 delattr(self, "threadObject") 內置函數,刪除綫程實例。
若之後仍有此 QThread 綫程實例 self.threadObject 的相關操作 (包括自動垃圾迴收),在後颱就可能輸齣以下警告提示 (甚至導緻應用程序崩潰):
QThread: Destroyed while thread is still running
相比 terminate() 立即終止 QThread 綫程,雖然存在以上現象,但 quit() 異步、安全離開綫程更可控。
注意: 不推薦使用 terminate() 立即終止 QThread 綫程實例,因為會導緻綫程死鎖、界麵卡死,甚至可能導緻應用程序崩潰。
版權聲明: 本文為獨傢原創稿件,版權歸 樂數軟件 ,未經許可不得轉載。