弱者或无主者或 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 强烈引用 ViewModelViewModel 持有对闭包的强引用。闭包包含对 ViewController:

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

只要 ViewController 被释放(例如,当您关闭它时就会发生这种情况),ViewModel 也会被释放。