gpt4 book ai didi

ios - 为什么当 ActiveReferenceCount > 0 时对象被取消初始化

转载 作者:行者123 更新时间:2023-11-28 10:08:48 24 4
gpt4 key购买 nike

我正在阅读有关 ARC 的内容,并对增加 Reference Count 感到困惑。我的示例代码如下。
我的第一个类:

class Owner{
var name: String
weak var cat:Cat? //Cat reference count will not increase because of 'weak'
init(name: String){
self.name = name
print("Owner class is initialized.")
}

deinit{
print("Owner class is deinitialized.")
}
}

我的第二堂课:

class Cat{
var name: String
var owner: Owner?

init(name: String){
self.name = name
print("Cat class is initialized.")
}

deinit {
print("Cat class is deinitilized.")
}
}

我的类(class)使用代码:

var mamun: Owner? = Owner(name: "Mamun") //OwnerAR = 1
var vutu: Cat? = Cat(name: "Vutu") // CatAR = 1
mamun?.cat = vutu // CatAr = 1
vutu?.owner = mamun // OwnerAR = 2
mamun = nil // OwnerAR = 1
vutu = nil // CatAR = 0

输出:

Owner class is initialized.
Cat class is initialized.
Cat class is deinitilized.
Owner class is deinitialized.

困惑:当Owner 引用计数为1 时,为什么在vutu = nil 代码执行后它被取消初始化。我在计算引用时做错了吗?

最佳答案

当您将 vutu 设置为 nil 时,该对象的引用计数变为零,并按预期取消初始化。在取消初始化的过程中,它会释放对其拥有的对象的任何强引用。所以它的 owner 被释放了。这将使您的 mamun 变量引用的对象的引用计数为 0。这就是为什么您会看到 Owner class is deinitialized. 的最后一条消息。

关于ios - 为什么当 ActiveReferenceCount > 0 时对象被取消初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50334256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com