ARC会在对象没有强引用时自动释放对象,但是如果在类中声明了deinit方法,即使没有其他引用对象的变量或常量,该对象也不会立即释放,而是等到deinit方法执行完毕后才会释放。例如:
class Person { var name: String init(name: String) { self.name = name print(name + " is being initialized") } deinit { print(name + " is being deinitialized") } }
var person1: Person? = Person(name: "Tom") var person2: Person? = Person(name: "Jerry")
person1 = nil person2 = nil
输出: Tom is being initialized Jerry is being initialized Tom is being deinitialized Jerry is being deinitialized
可以看到,当person1和person2的引用都置为nil时,Person对象并没有立即被释放,而是在deinit方法执行完毕后才被释放。