3

我有一个 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)?
}

现在,这是否会创建一个强大的参考循环?

如果这创造了一个,那么使用什么 - 弱或无主?

4

1 回答 1

2

这不会创建强引用循环,因为您使用了weak self.

ViewController强烈引用ViewModel. ViewModel对闭包有很强的引用。闭包持有对 的引用ViewController

VC ---strong---> ViewModel
 ^                    |
 |                   strong
 |                    v
  --------weak-----closure

只要ViewController被解除分配(例如,当您解除它时就会发生这种情况), ViewModel也会如此。

于 2018-03-31T09:52:44.270 回答