问题描述
我做了一个小实验:有 2 个视图控制器: 在第一个(根视图控制器)中,我将此代码用于呈现第二个视图控制器:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
present(ViewController2(),animated: true) {
self.dismiss(animated: true,completion: nil)
}
}
这是ViewController2里面的代码:
class ViewController2: UIViewController {
var workItem: dispatchWorkItem?
override func viewDidLoad() {
super.viewDidLoad()
workItem = dispatchWorkItem {
self.view.backgroundColor = .red
}
}
deinit {
print("deinit called")
}
}
因为在视图控制器 2 中,self
持有对 workItem
的强引用,而 workItem
持有对 self
的强引用,这里应该存在内存泄漏:view控制器 2 在我们完成呈现后不会被释放(证明行 deinit called
没有打印,如果我评论这个语句 self.view.backgroundColor = .red
,它打印出来:deinit called
)
但是当我尝试使用 Xcode
memory graph debug
和后来的 Instrument
来验证此泄漏时,他们都告诉我这里没有泄漏。
我错过了什么吗?
谢谢大家,祝你有美好的一天!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)