自动引用计数机制

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 被取消初始化