析构方法
对象的内存被回收前夕被隐式调用的方法, 对应OC的dealloc方法
对象的内存被回收前夕被隐式调用的方法, 对应OC的dealloc方法
主要执行一些额外操作, 例如释放一些持有资源, 关闭文件, 断开网络等
class FileHandler{
var fd: Int32? 文件描述符
指定构造器
init(path:String){
需要打开的文件路径, 打开方式(只读)
open方法是UNIX的方法
let ret = open(path, O_RDONLY)
if ret == -1{
fd = nil
}else{
fd = ret
}
print("对象被创建")
if ret == -1{
fd = nil
}else{
fd = ret
}
print("对象被创建")
}
析构方法
deinit{
关闭文件
if let ofd = fd{
close(ofd)
}
print("对象被销毁")
}
close(ofd)
}
print("对象被销毁")
}
}
var fh:FileHandler? =
FileHandler(path:"/Users/xiaoyang/Desktop/xmg.jpg")
当对象没有任何强引用时会被销毁
fh = nil
输出结果:
对象被创建
对象被销毁
析构方法的自动继承
父类的析构方法会被自动调用, 不需要子类管理
class Person {
var name:String
init(name:String){
self.name = name
print("Person init")
}
deinit{
print("Person deinit")
}
}
class SuperMan: Person {
var age:Int
init(age:Int){
self.age = age
var name:String
init(name:String){
self.name = name
print("Person init")
}
deinit{
print("Person deinit")
}
}
class SuperMan: Person {
var age:Int
init(age:Int){
self.age = age
super.init(name: "qbs")
print("SuperMan init")
}
}
deinit{
如果父类的析构方法不会被自动调用,那么我们还需要关心父类
但是如果这样做对子类是比较痛苦的
print("SuperMan deinit")
}
}
var sm: SuperMan? = SuperMan(age: 30)
}
}
var sm: SuperMan? = SuperMan(age: 30)
sm = nil
输出结果:
Person init
SuperMan init
SuperMan deinit
SuperMan init
SuperMan deinit
Person deinit