R4j*_*R4j 19 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 ?
}
}
Run Code Online (Sandbox Code Playgroud)
当调用子类的deinitializer时,是否调用super.deinit()将name变量赋值为nil?或者我必须在子类的deinitializer中手动分配?
Joh*_*ato 29
您可以选择deinit在子类中包含一个内部.
如果你这样做
let x = Sub()
Run Code Online (Sandbox Code Playgroud)
你会看到,首先deinit被叫是内部Sub()之后,base deinit被称为.所以是的,super.deinit()被调用但是在子类之后.
这本书也说(第286页):
您不能自己致电deinitializer.超类deinitializers由其子类继承,超类deinitializer在子类deinitializer实现的末尾自动调用.即使子类不提供自己的deinitializer,也始终调用超类deinitializers.
摘录自:Apple Inc."The Swift Programming Language."iBooks.https://itun.es/us/jEUH0.l
超类deinitializers由其子类继承,超类deinitializer在子类deinitializer实现的末尾自动调用.即使子类不提供自己的deinitializer,也始终调用超类deinitializers.
摘录自:Apple Inc."The Swift Programming Language."iBooks.https://itun.es/us/jEUH0.l
| 归档时间: |
|
| 查看次数: |
6087 次 |
| 最近记录: |