別のクラスからサブクラスを作成する場合override
、関数に必要ですが、 「関数」init()
をオーバーライドすることはできません。deinit
これはSwiftで可能ですか?
ここに例があります
class Foo {
init(){
print("Foo created")
}
deinit {
print("Foo gone")
}
}
class Bar: Foo {
override init(){
print("Bar created")
}
//Is not overwritten here
deinit {
print("Bar gone")
}
}
サンプルビューコントローラーの内部
override func viewDidLoad() {
super.viewDidLoad()
var f: Foo?
f = Foo()
f = Bar()
f = nil
}
出力
Foo created //Foo object initialised - Foo init() called
Foo created //Foo init() called before calling Bar init()? no call to superclass though..
Bar created //Bar object initialised - Bar init() called
Foo gone //Foo deinit called as Foo instance replaced by Bar instance
Bar gone //Bar deinit called as Bar instance holds no references and is destroyed
Foo gone //Foo deinit called again as part of Bar object destruction?
拡張に関する私の元の質問に追加するにはdeinit
:
コード例では、オーバーライドによってスーパークラスの関数がinit()
呼び出されるようです。init()
これは何が起こっているのですか?
Bar
インスタンスが初期化解除されると、同じ動作が発生します。これもここで起こっていることですか?