弱引用和无引用引用之间有什么区别?斯威夫特有:强引用弱参考无主参考文献无主参考如何与弱参考不同?什么时候使用无主参考安全?无主引用是否存在安全风险,如C / C ++中的悬空指针?
2 回答
慕哥9229398
TA贡献1877条经验 获得超6个赞
Q1。“无主参考”与“弱参考”有何不同?
弱参考:
弱引用是一种引用,它不会强制保留它引用的实例,因此不会阻止ARC处理引用的实例。因为弱引用被允许具有“无值”,所以必须将每个弱引用声明为具有可选类型。(Apple Docs)
无主参考:
与弱引用一样,无主引用并不会强烈保留它所引用的实例。然而,与弱引用不同,假定无主引用始终具有值。因此,无主引用始终定义为非可选类型。(Apple Docs)
何时使用每个:
只要对该引用有效,就使用弱引用在其生命周期的某个时刻变为nil。相反,当您知道在初始化期间设置引用后永远不会为nil时,请使用无主引用。(Apple Docs)
Q2。什么时候使用“无主参考”是安全的?
如上所述,假定无主参考始终具有值。因此,只有在确定引用永远不会为零时才应使用它。Apple Docs通过以下示例说明了无主引用的用例。
假设我们有两个类Customer
和CreditCard
。客户可以在没有信用卡的情况下存在,但没有客户就不会存在信用卡,即可以假设信用卡将始终拥有客户。所以,他们应该有以下关系:
class Customer { var card: CreditCard?}class CreditCard { unowned let customer: Customer}
Q3。“无主参考”是否引用了C / C ++中的“悬空指针”等安全风险
我不这么认为。
由于无主引用只是保证具有值的弱引用,因此它不应该以任何方式存在安全风险。但是,如果您尝试在其引用的实例被取消分配后访问无主引用,则会触发运行时错误,应用程序将崩溃。
这是我看到的唯一风险。
- 2 回答
- 0 关注
- 760 浏览
添加回答
举报
0/150
提交
取消