one*_*cat 11 memory-management swift
正如Apple在"Swift编程语言"中所说,似乎我们应该unowned
比weak
任何可能的更喜欢:
如果捕获的引用永远不会变为nil,则应始终将其捕获为无主引用,而不是弱引用.
从本页的"弱和无主参考"部分
我确实知道这两者之间的区别.但我好奇的是有没有很好的理由,宁愿 unowned
比weak
?我认为weak
更安全,我们可以总是编写[weak obj]
和可选的绑定检查,而不考虑存在的可能性obj
.
它与某些性能考虑或我错过的东西有关吗?或者是否完全可以使用weak
而不是一直使用unowned
?
Ivi*_* M. 17
'nil'
一旦它们指向的对象被解除分配,弱引用就会自动设置.为了在Swift中实现这一点,必须将它们声明为'var'
可选:
class SomeOtherClass {
weak var weakProperty: SomeClass?
}
Run Code Online (Sandbox Code Playgroud)
如果在实例仍处于活动状态时'weakProperty'
可以成为可能'nil'
,'SomeOtherClass'
并且我们想在使用它之前检查它(委托是一个这样的例子),这很好.但是,如果某些引用永远不应该在逻辑上存在'nil'
并且我们仍然希望阻止保留周期呢?在Objective-C中,任何对象引用都可以'nil'
(并且消息传递'nil'
总是无声地失败),因此我们总是使用不存在的困境'weak'
.但Swift根本没有可用的参考文献.我们使用选项来处理语义上缺乏价值的东西.但是我们不应该被迫使用选项来获得必须始终具有价值的东西,只是为了能够打破一个保留周期.这种做法违背了期权的预期语义.那是哪里'unowned'
来的.它有两种口味 - 'unowned(safe)'
和'unowned(unsafe)
'.后者是危险的,它'assign'
与'unsafe_unretained'
Objective-C 相当.但前者是默认的(至少在调试时,不确定它们是否在发布版本中将其优化为"无主(不安全)"),如果引用的对象过早地被释放,将会可靠地崩溃我们的应用程序.当然,如果出现问题,我们的应用程序会崩溃,但调试比默认失败要容易得多.它应该只在我们真正想要的时候默默地失败(在这种情况下我们会使用'weak'
)
归档时间: |
|
查看次数: |
1350 次 |
最近记录: |