【发布时间】:2018-01-12 15:13:40
【问题描述】:
我试图弄清楚为什么即使在对象保持存在之后,弱引用也会丢失其引用的对象。
我的代码如下:
MyClass {
deinit {
print("I'm being deinited") // This never gets called
}
func doConnection(connection: Future<Data, ServerConnectionError>) {
Future<Void, ServerConnectionError> { complete in
connection.onSuccess {[weak self] data in
guard let strongSelf = self else {
return // This line gets called
}
...
}
}
}
}
通过查看内存图,我可以看到在future完成之前被self引用的对象还活着(根据内存地址判断)。
在发现它的弱引用为 nil(最右边的 MyClass 实例)后,假设丢失对象的内存图如下所示:
上面的子树是用来保存对象的,而下面的子树与当前的堆栈执行有关。在第 3 层(从右到左)被许多其他对象引用的对象(蓝色框)持有对数组的强引用,而数组又持有对 MyClass 实例的引用。
编辑:在下面的答案中解决了问题。冷却结束后将标记为已解决。
【问题讨论】:
标签: swift weak-references