程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了弱引用和非引用之间有什么区别?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决弱引用和非引用之间有什么区别??

开发过程中遇到弱引用和非引用之间有什么区别?的问题如何解决?下面主要结合日常开发的经验,给出你关于弱引用和非引用之间有什么区别?的解决方法建议,希望对你解决弱引用和非引用之间有什么区别?有所启发或帮助;

双方weak@H_772_4@并uNowned@H_772_4@引用不创建一个strong@H_772_4@被引用的对象上保持(又名它们不会取消分配引用的对象增加,为了保留计数,以防止电弧)。

但是为什么要两个关键词呢?这种区别与Optional@H_772_4@类型内置在Swift语言中这一事实有关。长话短说:可选类型提供了内存安全性(这与Swift的构造函数规则完美结合- 为了提供这种好处而严格)。

一个weak@H_772_4@参允许它可能成为nil@H_772_4@(这个自动引用对象被释放情况),因此你的财产的类型必须是可选的- 所以你,作为一个程序员,有义务使用它(基本上是前检查编译器会尽力迫使您编写安全的代码)。

一个uNowned@H_772_4@参假定它永远不会成为nil@H_772_4@其生命周期内。在初始化期间必须设置一个无主引用- 这意味着该引用将被定义为一种非可选类型,无需检查即可安全使用。如果以某种方式释放了要引用的对象,则当使用无主引用时,应用程序将崩溃。

从Apple文档:

在文档中,有一些示例讨论了保留周期以及如何打破它们。所有这些示例均摘自docs。

weak@H_772_4@关键字示例:

class Person {
    let name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
}

class Apartment {
    let number: Int
    init(number: int) { self.number = number }
    weak var tenant: Person?
}
@H_772_4@

现在,对于一些ASCII艺术(您应该去看一下文档 -它们有漂亮的图表):

Person ===(strong)==> Apartment
Person <==(weak)===== Apartment
@H_772_4@

Person@H_772_4@和Apartment@H_772_4@实施例显示的情况下两个属性,这两者都允许是零,有可能引起强烈的基准周期的潜力。用弱引用可以最好地解决此情况。两个实体都可以存在而不必严格依赖另一个实体。

uNowned@H_772_4@关键字示例:

class Customer {
    let name: String
    var card: CreditCard?
    init(name: String) { self.name = name }
}

class CreditCard {
    let number: UInt64
    uNowned let customer: Customer
    init(number: UInt64, customer: Customer) { self.number = number; self.customer = customer }
}
@H_772_4@

在此示例中,a Customer@H_772_4@可能具有或可能不具有CreditCard@H_772_4@,但a CreditCard@H_772_4@ 与关Customer@H_772_4@。为了表示这一点,Customer@H_772_4@该类具有可选card@H_772_4@属性,但是CreditCard@H_772_4@该类具有非可选(且没有customer@H_772_4@所有权)属性。

Customer ===(strong)==> CreditCard
Customer <==(uNowned)== CreditCard
@H_772_4@

Customer@H_772_4@和CreditCard@H_772_4@实施例示出了其中被允许是nil一个属性并且不能是零另一个属性具有引起很强的参周期的电势的情况。最好使用无主引用来解决此情况。

苹果的注意事项:

还有第三种情况,即两个属性都应始终具有值,并且初始化完成后,两个属性都不应为零。

此外,在使用闭包时,还可以避免经典的保留周期方案。

为此,我鼓励您访问Apple文档或阅读本书。

解决方法

斯威夫特有:

  • 强引用
  • 文献薄弱
  • 无人参

无主引用与弱引用有何不同?

什么时候可以使用无主引用安全?

无主引用是否像C / C
++中的悬空指针一样具有安全风险?

大佬总结

以上是大佬教程为你收集整理的弱引用和非引用之间有什么区别?全部内容,希望文章能够帮你解决弱引用和非引用之间有什么区别?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: