swift - 弱或无主或无

标签 swift automatic-ref-counting weak-references unowned-references

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

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

如果这创建了一个,那么使用什么 - weak 还是 unowned?

最佳答案

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

ViewController 持有对 ViewModel 的强引用。 ViewModel 持有对闭包的强引用。闭包包含对 ViewController引用:

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

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

关于swift - 弱或无主或无,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49586264/

相关文章:

swift - ScrollView页面大小是如何计算的?

ios - 使用第三方库将代码重构为 ARC

ios - 如何使用 ARC 在 iOS 中将对象标记为保留和只读?

.net - 了解 ConditionalWeakTable

ios - 对属性(property)设置者的行为感到困惑

ios - 内存不足时性能低下 - Swift

ios - 将文本文件加载到数组结构中

ios - 将下载的 Gif 存储在 Firebase 中

Objective-C:指向 UITextField 的弱指针-> UITextField 不出现

ios - 从 block 中设置 UILabel 的文本不能按预期工作