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() {
     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 ?
    }
}

调用子类的析构函数时,是否调用super.deinit()将nil赋值给name变量?或者我必须在子类的析构器中手动赋值?

最佳答案

您可以选择在您的子类中有一个deinit

如果你这样做

    let x = Sub()

你会看到首先调用的 deinitSub() 中的那个,然后是 base deinit 被调用。所以是的,super.deinit() 被调用但是在子类之后。

书中还说(第 286 页):

You are not allowed to call a deinitializer yourself. Superclass deinitializers are inherited by their subclasses, and the superclass deinitializer is called automatically at the end of a subclass deinitializer implementation. Superclass deinitializers are always called, even if a subclass does not provide its own deinitializer.

摘自:Apple Inc.“The Swift Programming Language”。电子书。 https://itun.es/us/jEUH0.l

关于inheritance - 理解swift语言中的去初始化和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24019652/

相关文章:

xcode - 如何从 Playground 中的 Nib 获取 View ?

Java设计模式: Enforce calling methods of all supertypes

c++ - 多层上的模板化类未知类型

Java抽象父级在父级构造函数中初始化子级之前调用子级方法

ios - 缩放 UIView 重置旋转

ios - 使用Swift将一些Class类型的Arraylist转换成JSON格式

c++ - 指向虚类的指针

Python 3.x - 在将项目附加到列表之前运行函数

ios - GameCenter - 登录用户,如果他们已经输入了他们的凭据

swift - Swift 中的类型强制问题