为了账号安全,请及时绑定邮箱和手机立即绑定

弱引用和无引用引用之间有什么区别?

弱引用和无引用引用之间有什么区别?

白板的微信 2019-08-29 16:34:10
弱引用和无引用引用之间有什么区别?斯威夫特有:强引用弱参考无主参考文献无主参考如何与弱参考不同?什么时候使用无主参考安全?无主引用是否存在安全风险,如C / C ++中的悬空指针?
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

Q1。“无主参考”与“弱参考”有何不同?

弱参考:

弱引用是一种引用,它不会强制保留它引用的实例,因此不会阻止ARC处理引用的实例。因为弱引用被允许具有“无值”,所以必须将每个弱引用声明为具有可选类型。(Apple Docs)

无主参考:

与弱引用一样,无主引用并不会强烈保留它所引用的实例。然而,与弱引用不同,假定无主引用始终具有值。因此,无主引用始终定义为非可选类型。(Apple Docs)

何时使用每个:

只要对该引用有效,就使用弱引用在其生命周期的某个时刻变为nil。相反,当您知道在初始化期间设置引用后永远不会为nil时,请使用无主引用。(Apple Docs)


Q2。什么时候使用“无主参考”是安全的?

如上所述,假定无主参考始终具有值。因此,只有在确定引用永远不会为零时才应使用它。Apple Docs通过以下示例说明了无主引用的用例。

假设我们有两个类CustomerCreditCard。客户可以在没有信用卡的情况下存在,但没有客户就不会存在信用卡,即可以假设信用卡将始终拥有客户。所以,他们应该有以下关系:

class Customer {
    var card: CreditCard?}class CreditCard {
    unowned let customer: Customer}

Q3。“无主参考”是否引用了C / C ++中的“悬空指针”等安全风险

我不这么认为。

由于无主引用只是保证具有值的弱引用,因此它不应该以任何方式存在安全风险。但是,如果您尝试在其引用的实例被取消分配后访问无主引用,则会触发运行时错误,应用程序将崩溃。

这是我看到的唯一风险。

链接到Apple Docs


查看完整回答
反对 回复 2019-08-29
  • 2 回答
  • 0 关注
  • 760 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信