22

Person Class次のコードでは、インスタンスへのすべての参照を解放する deinit メソッドを呼び出そうとしていますMarkが、deinit は呼び出されません。なんで?

class Person{

    let name:String

    init(name:String){
        self.name = name
        println("Person created")
    }

    deinit {

        println("Person \(name) deinit")
    }
}

var Mark:Person? = Person(name:"Mark")
Mark = nil // Shouldn't the person deinit method be called here? It doesn't.
4

4 に答える 4

26

Swift 用の XcodePlaygroundsは、通常のアプリのようには機能しません。それらは一度だけ実行されているわけではありません。作成されたオブジェクトはメモリ内にとどまり、コードを変更するまで検査できます。コードを変更すると、プレイグラウンド全体が再評価されます。これが発生すると、以前の結果はすべて破棄され、すべてのオブジェクトの割り当てが解除されますが、そこからの出力は表示されません。

コードは正しいですが、Playgrounds はメモリ管理に関連するテストには適していません。

関連するSOの質問は次のとおりです。迅速なプレイグラウンドでのメモリリーク/ deinit {}が一貫して呼び出されない

于 2014-06-23T10:32:22.723 に答える