谢谢提示,让我研究一下再加几个测试样例。
看起来如果把 asyncslot 用作 decorator,那是会生成弱引用的,因为 decorator 作用于的是 class 里的普通函数,而 connect 时拿到的是临时生成的 bound method。
如果把 asyncslot 直接套用在 bound method 上,确实会产生对 self 的强引用和引用循环。
- 来自 水木社区APP v3.5.6
【 在 hgoldfish 的大作中提到: 】
: PyQt 的 slot 是弱引用。。我看你源代码好像没有处理。
:
: class MyDialog(QDialog):
: def __init__(self):
: super().__init__()
: self.button = QPushButton(self)
: self.button.clicked.connect(self.say_hello)
:
: def say_hello(self):
: print("hello, world!")
:
: 在以上代码里面:
:
: self.button.clicked.connect(self.say_hello)
:
: 形成了循环引用。销毁 MyDialog 的时候,因为循环引用的存在,有一定可能出问题。所以 PyQt 特别处理了一下。检测到 self.say_hello 有存在 __self__ 时改用 weakptr 存储。
--
FROM 124.217.188.*