1. deinit关键字
在对象释放前调用,书写形式为
deinit {
}
2. 引用计数
先看一个?
import UIKit
class Person{
var name: String
var pet: Pet?
init(name: String){
self.name = name
print("Person", name, "is initialized")
}
init(name: String, petName: String){
self.name = name
self.pet = Pet(name: petName)
print("Person", name, "is initialized")
}
deinit{
print("Person", name, "is deinitialized!")
}
}
class Pet{
var name: String
init(name: String){
self.name = name;
print("Pet", name, "is initialized")
}
deinit{
print("Pet", name, "is deinitialized!")
}
}
var liuyubobobo: Person? = Person(name: "liuyubobobo", petName: "aZai")
liuyubobobo = nil
此时的内存状态图如下
这里开辟了两片内存空间,一个装person一个装pet,liuyubobobo指向person,person里面的pet指向Pet。当我释放liuyubobobo时,这两个箭头都消失,两片内存的引用计数都变成0,所以会调用deinit然后释放。
在看这个代码
import UIKit
class Person{
var name: String
var pet: Pet?
init(name: String){
self.name = name