swift – ARC(自动引用计数)在行动中

swift – ARC(自动引用计数)在行动中,第1张

概述我目前正在关注 Apple Documentation.这是我的问题: class Person { let name: String init(name: String) { self.name = name println("\(name) is being initialized") } deinit { pri 我目前正在关注 Apple Documentation.这是我的问题:

class Person {    let name: String    init(name: String) {        self.name = name        println("\(name) is being initialized")    }    deinit {        println("\(name) is being deinitialized")    }}class VIEwController: UIVIEwController {    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        var reference1: Person?        var reference2: Person?        var reference3: Person?        reference1 = Person(name: "John Appleseed")        // prints "John Appleseed is being initialized        reference2 = reference1        reference3 = reference1        reference1 = nil        reference2 = nil    }}

在reference1等于nil之后,ARC取消分配实例并打印“John Appleseed正在被取消初始化”

在reference3 = nil之后不应该解除分配吗?

解决方法 这里的问题是范围问题.我们可以通过断点找到更多信息.

在这里,我们在初始化reference1之前就停止了.所有变量都是nil:

并且在reference1初始化之后?

好的,让我们在reference2和reference3设置之后跳到前面:

所有三个变量都指向相同的内存位置,我们可以看到初始化程序只运行一次.这些都指向同一个位置.

让我们前进一步:

reference1现在指向None.这是零. deinit mmethod没有被调用并打印出它的消息.

让我们再向前迈进一步:

现在reference1和reference2都是零.我添加的println语句被调用.但deinit没有运行,reference3不是零.

下一步是完全退出方法.一旦我们离开该方法,变量超出范围并且调用deinit:

总结

以上是内存溢出为你收集整理的swift – ARC(自动引用计数)在行动中全部内容,希望文章能够帮你解决swift – ARC(自动引用计数)在行动中所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1019567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存