我正在尝试弄清楚为什么即使对象一直存在,弱引用仍会失去其所引用的对象。
我的代码如下:
通过检查内存图,我可以看到在未来完成之前被self引用的对象仍然存在(根据内存地址判断)。
在找到弱引用为nil后,所谓缺失对象的内存图如下(最右侧为MyClass实例): 上面的子树应该保持对象存活,而下面的子树与当前堆栈执行有关。在从右到左的第3级中被许多其他对象引用的蓝色框中包含对数组的强引用,该数组反过来又包含对MyClass实例的引用。
我的代码如下:
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
}
...
}
}
}
}
通过检查内存图,我可以看到在未来完成之前被self引用的对象仍然存在(根据内存地址判断)。
在找到弱引用为nil后,所谓缺失对象的内存图如下(最右侧为MyClass实例): 上面的子树应该保持对象存活,而下面的子树与当前堆栈执行有关。在从右到左的第3级中被许多其他对象引用的蓝色框中包含对数组的强引用,该数组反过来又包含对MyClass实例的引用。
编辑:问题已在下面的答案中解决。在冷却时间过后将标记为已解决。
func
),我无法在那里放置捕获列表。我已经尝试将捕获列表放置在Future<Void...
行中,但没有成功。 - Gonzalo