有什么方法可以检查unowned(safe)
Swift 参考中的“可用性”吗?所以,我正在寻找一个假设函数,如isReferenceAccessible
本例所示:
func someMethod() {
someAsyncOperation(parameters) { [unowned(safe) self] in
guard isReferenceAccessible(self) else {
return
}
self.someAnotherMethod()
}
}
免责声明:这个问题与weak
参考无关!我知道strong
,unowned
和weak
references 是如何工作的。而且我不想使用weak
引用(因为它可能很慢且可变)。我知道unowned(safe)
即使deinited
在我们尝试访问它时已经分配了引用。而且我知道编译器可以执行此检查,并且它实际上会在应用程序崩溃之前对其进行检查。
因此,我相信它可以是非常强大且性能良好的技术/范式,可以打破现代 Swift 中的引用循环。
此外,我相信它可能是一个很棒的语言功能!例如,假设我们调用了修饰符shared_ownership
,并且它的工作原理与上述行为类似:
method(parameters) { [shared_ownership self] in
self.someAnotherMethod()
}
...通过这样的实现:
method(parameters) { [unowned(safe) self] in
guard isReferenceAccessible(self) else {
return
}
self.someAnotherMethod()
}
...具有副作用(没有weak
相关的复杂性和性能损失)相当于:
method(parameters) { [weak self] in
guard let strongSelf = self else {
return
}
strongSelf.someAnotherMethod()
}
哦,那太棒了!
有关、和之间差异的weak
unowned(safe)
unowned(unsafe)
更多信息。
更新
我发现了与上面讨论的特性相关的很棒的 Swift 提案:允许使用可选绑定将 self 从弱引用升级到强引用。