自动引用计数机制
mechanism of automatic reference counting
我正在阅读有关自动引用计数以及初始化程序和反初始化程序的内容
我在做低于实用性的事情
class person
{
var first_name:String?
var last_name:String?
init(firstname name:String,lastname lastname:String) {
first_name = name
self.speciality = speciality
}
deinit {
print("object destroyed")
}
}
我已经像上面那样制作了一个 class 然后我创建了像
这样的实例
let newPerson =person.init(firstname:"string1" lastname:"string2")
现在我的问题是这个对象将如何根据 ARC 销毁,因为我创建的人是不变的所以我不能将它分配给其他对象它给了我这个错误
error: cannot assign to value: 'newPerson' is a 'let' constant
newPerson = nil
~~~~~~~~~~ ^
但如果我这样做,则调用 deinit 方法
var newPerson = person(firstname:"string1",lastname:"string2")
然后如果我这样做
newPerson = person(firstname:"string2",lastname:"string3")
然后调用 deinit 方法所以这里发生了什么任何人都可以简要解释一下
因为 newPerson
是一个非可选的 Person
,你不能给它赋值 nil
。但是要取消初始化对象(称之为 A),您不需要这样做。当 newPerson
超出范围时会发生这种情况(例如,它声明的函数超出范围)。
当您构建一个新人(称之为 B)并将其分配给 newPerson
时,对 A 的引用 newPerson
将被覆盖。由于 newPerson
是对 A 的最后一个强引用,因此 A 被取消初始化
我正在阅读有关自动引用计数以及初始化程序和反初始化程序的内容 我在做低于实用性的事情
class person
{
var first_name:String?
var last_name:String?
init(firstname name:String,lastname lastname:String) {
first_name = name
self.speciality = speciality
}
deinit {
print("object destroyed")
}
}
我已经像上面那样制作了一个 class 然后我创建了像
这样的实例let newPerson =person.init(firstname:"string1" lastname:"string2")
现在我的问题是这个对象将如何根据 ARC 销毁,因为我创建的人是不变的所以我不能将它分配给其他对象它给了我这个错误
error: cannot assign to value: 'newPerson' is a 'let' constant
newPerson = nil
~~~~~~~~~~ ^
但如果我这样做,则调用 deinit 方法
var newPerson = person(firstname:"string1",lastname:"string2")
然后如果我这样做
newPerson = person(firstname:"string2",lastname:"string3")
然后调用 deinit 方法所以这里发生了什么任何人都可以简要解释一下
因为 newPerson
是一个非可选的 Person
,你不能给它赋值 nil
。但是要取消初始化对象(称之为 A),您不需要这样做。当 newPerson
超出范围时会发生这种情况(例如,它声明的函数超出范围)。
当您构建一个新人(称之为 B)并将其分配给 newPerson
时,对 A 的引用 newPerson
将被覆盖。由于 newPerson
是对 A 的最后一个强引用,因此 A 被取消初始化