Inheritance 理解swift语言中的去初始化和继承
假设我有两个类:基类和子类,如下所示:Inheritance 理解swift语言中的去初始化和继承,inheritance,swift,Inheritance,Swift,假设我有两个类:基类和子类,如下所示: class Base{ var name: String? init() { name = "The base class" } deinit { println("call Deinitialization in base class") name = nil } } class Sub: Base{ var subName: String? init(
class Base{
var name: String?
init() {
name = "The base class"
}
deinit {
println("call Deinitialization in base class")
name = nil
}
}
class Sub: Base{
var subName: String?
init() {
super.init()
subName = "The sub class"
}
deinit {
println("call Deinitialization in sub class")
subName = nil
// does it really call super.deinit() ?
// or assign name = nil ?
}
}
调用子类的deinitializer时,它是否调用super.deinit()
将nil赋值给name
变量?或者我必须手工指定子类的除名符
超类去初始化器由其子类继承,而
超类deinitializer在事件结束时自动调用
子类去初始化器实现。超类去初始化器是
始终调用,即使子类不提供自己的
去初始化器
摘自:苹果公司《Swift编程语言》。iBooks 您可以选择在子类中使用
deinit
如果你这样做
let x = Sub()
您将看到,首先调用的deinit
是Sub()
中的一个,然后调用base
deinit
。因此,是的,super.deinit()
在子类之后被调用
书中还说(第286页):
你不允许自己打电话给去初始化者。超类去初始化器由它们的子类继承,而超类
deinitializer在子类末尾自动调用
去初始化器实现。超类去初始化器总是
调用,即使子类不提供自己的去初始化器
摘自:苹果公司《Swift编程语言》。iBooks