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