机构的自动引用计数
问题描述:
我正在读有关自动引用计数和初始化和deinitializers 和我正在做以下实用机构的自动引用计数
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")
}
}
我已经作出一个类象上面,然后我装箱实例像
let newPerson =person.init(firstname:"string1" lastname:"string2")
现在我的问题是这个对象是如何des根据ARC troyed,因为我已经创建者是恒定的,所以我不能把它分配给其他对象时,它给了我这个错误
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
时,必须覆盖参考newPerson
。由于newPerson
是A的最后一个强烈参照,A被初始化