【发布时间】:2020-03-28 14:28:49
【问题描述】:
当我开始开发 Swift 代码时,我并没有处理内存泄漏的经验,所以我需要一些时间来弄清楚什么是保留周期,什么是 ARC,以及为什么我应该使用 weak 或 @ 987654322@ 在我的闭包中创建了这些保留周期。
默认情况下,我总是将这段代码添加到引用自身的闭包中:
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 几乎是默认代码。
这让我产生疑问。如果我必须始终在引用 self 的代码中添加 weak self 并且不允许该类被 deinit 为什么 Apple 不将其作为语言的默认行为,因此我们不需要重复此代码在我们的代码库中无处不在?
【问题讨论】:
-
这个 UX 肯定还有一些改进的余地,但从根本上说,自动化这个需要硬编码到编译器中,假设当
self是nil时会发生什么。在你的情况下,你只是没有操作。这可能是最常见的有效案例,但我想还有其他案例。
标签: swift automatic-ref-counting retain-cycle