弱者或无主者或 None
Weak or Unowned or None
我有一个ViewControllerclass如下图:
class ViewController {
var viewModel = ViewModel()
viewDidLoad() {
self.viewModel.showAlert = { [weak self] in
self?.alert()
}
}
func alert() {
// alert logic
}
}
这是 ViewModel class
class ViewModel {
var showAlert: (() -> Void)?
}
现在,这是否会产生强引用循环?
如果这创建了一个,那么使用什么 - 弱的还是无主的?
这不会创建强引用循环,因为您使用了weak self
。
ViewController
强烈引用 ViewModel
。 ViewModel
持有对闭包的强引用。闭包包含对 ViewController
:
的 weak 引用
VC ---strong---> ViewModel
^ |
| strong
| v
--------weak-----closure
只要 ViewController
被释放(例如,当您关闭它时就会发生这种情况),ViewModel
也会被释放。
我有一个ViewControllerclass如下图:
class ViewController {
var viewModel = ViewModel()
viewDidLoad() {
self.viewModel.showAlert = { [weak self] in
self?.alert()
}
}
func alert() {
// alert logic
}
}
这是 ViewModel class
class ViewModel {
var showAlert: (() -> Void)?
}
现在,这是否会产生强引用循环?
如果这创建了一个,那么使用什么 - 弱的还是无主的?
这不会创建强引用循环,因为您使用了weak self
。
ViewController
强烈引用 ViewModel
。 ViewModel
持有对闭包的强引用。闭包包含对 ViewController
:
VC ---strong---> ViewModel
^ |
| strong
| v
--------weak-----closure
只要 ViewController
被释放(例如,当您关闭它时就会发生这种情况),ViewModel
也会被释放。