Swift 为什么斯威夫特不';不能自动处理内存泄漏?

Swift 为什么斯威夫特不';不能自动处理内存泄漏?,swift,automatic-ref-counting,retain-cycle,Swift,Automatic Ref Counting,Retain Cycle,当我开始开发Swift代码时,我并没有处理内存泄漏的经验,所以我花了一些时间来弄清楚什么是保留周期,什么是ARC,以及为什么我应该在创建这些保留周期的闭包中使用弱或无主 默认情况下,我总是在引用self的闭包中添加这段代码: class MyController: UIViewController { var myClosure: (Data?, Error?)? override viewDidLoad() { self.myClosure = { [weak

当我开始开发Swift代码时,我并没有处理内存泄漏的经验,所以我花了一些时间来弄清楚什么是保留周期,什么是ARC,以及为什么我应该在创建这些保留周期的闭包中使用
无主

默认情况下,我总是在引用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)
        }
    }
}
该代码非常常见,使用此
修饰符以及展开
自我
几乎是默认代码


这使我怀疑。如果我必须总是在引用
self
的代码中添加
弱self
,并且不允许类被deinit,那么为什么苹果不将其作为语言的默认行为,所以我们不需要让此代码在代码库中到处重复?

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


但是在这种特殊情况下,你必须而且它是

这种用户体验肯定还有一些改进的空间,但是从根本上说,自动化这将需要在编译器中硬编码一个假设,即当
self
nil
时会发生什么。在你的情况下,你只是不同意。这可能是最常见的有效案例,但我想还有其他的。