为什么Swift不会自动处理内存泄漏?

时间:2019-12-03 20:37:35

标签: swift automatic-ref-counting retain-cycle

当我开始开发Swift代码时,我还没有经历过内存泄漏的处理,因此我花了一些时间弄清楚什么是保留周期,什么是ARC,以及为什么我应该使用weakunowned在我创建这些保留循环的闭包中。

默认情况下,我总是在引用self的闭包中添加这段代码:

class MyController: UIViewController {
    var myClosure: (Data?, Error?)?

    override viewDidLoad() {
        self.myClosure = { [weak self] (data, err) in 
            guard let self = self else { return }
            self.present(someVC, animated: true)
        }
    }
}

该代码非常普遍,使用此weak修饰符并展开self几乎是默认代码。

这使我产生疑问。如果我必须始终在引用weak self的代码中添加self,并且不允许取消初始化该类,为什么Apple不会将其设置为该语言的默认行为,因此我们不需要这段代码在我们的代码库中到处都有重复吗?

1 个答案:

答案 0 :(得分:0)

在闭包中引用weak self时不必总是使用self

但是在这种情况下,您必须,它是explained here