我有一个ViewController类,如下所示:
class ViewController {
var viewModel = ViewModel()
viewDidLoad() {
self.viewModel.showAlert = { [weak self] in
self?.alert()
}
}
func alert() {
// alert logic
}
}
这是ViewModel类
class ViewModel {
var showAlert: (() -> Void)?
}
现在,这是否会创建一个强大的参考周期?
如果这会创建一个,那么使用什么 - 弱或无主?
答案 0 :(得分:2)
这是不创建强大的参考周期,因为您使用了weak self
。
ViewController
强烈引用ViewModel
。 ViewModel
强烈提及闭包。闭包拥有对ViewController
:
VC ---strong---> ViewModel
^ |
| strong
| v
--------weak-----closure
只要ViewController
被解除分配(例如当您解雇时就会发生这种情况),ViewModel
也会被释放。