我目前正在关注
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不是零.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。