https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Deinitialization.html#//apple_ref/doc/uid/TP40014097-CH19-ID142
类似于C++的析构函数、Java的finalize方法, Swift提供了析构函数deinit用于释放资源。 语法:
-
deinit {
-
// perform the deinitialization
-
}
Swift使用自动引用计数释放堆内存, 而栈内存是通过判断是否超过作用域。
class SuperClass {
var count: Int
init() {
count = 0
print("SuperClass init")
}
deinit {
print("SuperClass deinit")
}
}
class ExtClass: SuperClass {
var name: String
override init() {
name = "zhangsan"
super.init()
print("Extclass init")
}
func showMsg() {
print("ExtClass showMsg")
}
deinit {
print("ExtClass deinit")
}
}
func testMethod(){
let obj = ExtClass()
obj.showMsg()
}
testMethod()
SuperClass init
Extclass init
ExtClass showMsg
ExtClass deinit
SuperClass deist
析构很简单, 注意以下几个特点:
1、在堆内存中使用自动引用计数, 引用个数为0时被回收;
2、局部变量超出作用域时被回收;
3、析构时序, 先释放派生类、再释放基类;
4、类都有析构函数,函数名称为deinit;
5、只有类有析构函数,结构体和枚举没有析构函数。(PS:知道为什么吗??? 前几篇博文已介绍过了, 类对象在堆里,结构体和枚举在栈里)