当我开始开发Swift代码时,我还没有经历过内存泄漏的处理,因此我花了一些时间弄清楚什么是保留周期,什么是ARC,以及为什么我应该使用weak
或unowned
在我创建这些保留循环的闭包中。
默认情况下,我总是在引用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不会将其设置为该语言的默认行为,因此我们不需要这段代码在我们的代码库中到处都有重复吗?