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(自动引用计数)在行动中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)