我的快速代码如下。我在闭包中使用了 self,但是当我运行项目时,内存图没有显示保留周期。我错了,有一个保留周期?
class ViewController: UIViewController {
private var counter = 0
private var closure : (() -> ()) = { }
func foo() {
closure()
}
override func viewDidLoad() {
super.viewDidLoad()
closure = {
self.counter += 1
print(self.counter)
}
}
}
最佳答案
是的,Xcode并不总是直观地表示强引用循环。但它一致表明相关对象尚未被释放。
例如,如果我通过导航 Controller 推送并弹出,我会在事件对象列表中看到 ViewController
,但是当我选择它时,看不到任何循环,而是看到一些神秘的图表,包括导航 Controller (即使我将其弹出):
话虽如此,我发现如果我以模态方式呈现并关闭有问题的 View Controller ,我会更清楚地看到循环:
如果我们能够看到原型(prototype)循环(如下所示),那就太好了,但是在处理 UIKit 对象时,情况并不总是那么简单。
关于xcode内存图不显示保留周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60618767/