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

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

斯威夫特有:

  • 强引用

  • 弱参考

  • 无主参考文献

无主参考如何与弱参考不同?

什么时候使用无主参考安全?

无主引用是否存在安全风险,如C / C ++中的悬空指针


白板的微信
浏览 761回答 2
2回答

慕哥9229398

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 ++中的“悬空指针”等安全风险我不这么认为。由于无主引用只是保证具有值的弱引用,因此它不应该以任何方式存在安全风险。但是,如果您尝试在其引用的实例被取消分配后访问无主引用,则会触发运行时错误,应用程序将崩溃。这是我看到的唯一风险。链接到Apple Docs
打开App,查看更多内容
随时随地看视频慕课网APP