xcode(6.3.2)で新しい「Single View Application」プロジェクトを作成し、ViewControllerにdeinit関数のみを追加するとします。アプリを実行し、アプリを閉じます。Deinit が呼び出されることはありません。いくつかのデバイスとシミュレーターでテストしました。
deinit {
println("deinit:")
}
何故ですか?それは標準的な動作ですか?機能させるにはどうすればよいですか?
/* 編集 */ コメントを読んだ後、このコードを Viewcontroller に追加しました。
import UIKit
class A {
func test() {
println("A test")
}
deinit {
println("A deinit")
}
}
class ViewController: UIViewController {
var a:A? = A()
override func viewDidLoad() {
super.viewDidLoad()
println("ViewController viewDidLoad")
a?.test()
}
override func viewDidDisappear(animated:Bool) {
println("ViewController viewDidDisappear")
a = nil
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
println("ViewController didReceiveMemoryWarning")
}
deinit {
println("ViewController deinit")
a = nil
}
}
今私は得る
ViewController viewDidLoad:
A test
ViewController viewDidDisappear:
A deinit
これは、ビュー コントローラーの deinit 関数が信頼できないため、viewDidDisappear 呼び出し内で手動でオブジェクトをクリーンアップする必要があるということですか?