自动引用计数机制

时间:2017-09-22 17:36:40

标签: memory-management swift3 automatic-ref-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")
        }

    }




我已经创建了一个类似上面的类,然后我创建了像

这样的实例
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方法,所以这里发生的事情可以让任何人简单解释一下

1 个答案:

答案 0 :(得分:2)

由于newPerson是非可选的Person,因此您无法为其nil分配newPerson。但是为了取消初始化对象(称之为A),你不需要。当newPerson超出范围时(例如,声明的函数超出范围),就会发生这种情况。

当你构建一个新人(称之为B)并将其分配给newPerson时,必须覆盖参考newPerson对A的覆盖。由于function cmp($a, $b) { if ($a['priority'] == $b['priority']) { return 0; } return ($a['priority'] < $b['priority']) ? -1 : 1; } uasort($header_array, 'cmp'); 是对A的最后一个强引用,因此A被取消初始化