c z*_*c z 7 python events qt pyqt signals-slots
简短问题:
可以通知处理程序内存泄漏。
长问题:
在C#中,如果我将处理程序附加到事件
left_object.left_event += right_object.right_handler
Run Code Online (Sandbox Code Playgroud)
然后,我需要删除处理程序,right_object否则垃圾收集器将永远不会处理它(因为left_object.left_event保留了的指针right_object)
PyQt信号和插槽也是如此。
left_object.left_signal.connect( right_object.right_handler )
Run Code Online (Sandbox Code Playgroud)
从这个问题中,我看到Qt会在调用left_objector 的析构函数时自动解除信号和插槽的链接,right_object但是在Python中,我无法显式调用该析构函数,它right_handler是一个普通的函数。
我是否需要删除处理程序以防止right_objects的内存泄漏,还是PyQt使用某种弱引用?
这种设计可能会出现内存泄漏。如果这些连接包含使对象保持活动状态的引用,则需要断开信号和槽的连接。
这是否真的发生取决于到底right_handler是什么。如果right_handler是一个带有引用的闭包,self那么你就会遇到这个问题。
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |