1

これはAppleのドキュメントまたはswift bookのいずれかから入手しました

インスタンスが初期化解除されても、インスタンス内のプロパティに引き続きアクセスでき、インスタンスが完全になくなる前に必要に応じて操作できます。

私は混乱しています。たとえば、deinit()メソッドでインスタンス プロパティを使用して数学的なアクションを実行するときのことですか? stringまたは、特定のインスタンスの一部であったタイプのプロパティをdeinit() メソッドから出力するときを考えてみましょう。もしそうなら、deinit()初期化解除中のプロパティを操作する唯一の方法はメソッドですか?

4

3 に答える 3

2

aa var を持つ Swift クラスがある場合、ARC がそれを解放できないために後でクリーンアップする必要があることがわかっている場合 (たとえば、C メモリ)、deinit でそれを行うことができます。プロパティに格納されているポインターは引き続き有効です。

ただし、それ以上のことは役に立ちません (通知センターまたは kvo で監視を終了します)。なぜなら、いつ deist が呼び出されるかは保証されていないからです。割り当て解除の前に呼び出されることのみ [そのときはいつでも]

于 2015-11-06T06:55:52.943 に答える
2

deinit解放の直前 (retainCount が 0 に達したとき) に呼び出されるため、すべてのプロパティは引き続き有効であり、文字列を出力できます。プロパティを明示的に nil に設定する必要はありませんdeinit。これは自動的に行われるためです。

deinitそうは言っても、ほとんどのクラスは実装する必要さえありません

ほとんどのdeinit場合、インスタンスが登録されているオブザーバーを削除したり、必要に応じて通知を投稿したりしていました。

于 2015-11-06T07:09:48.723 に答える
1

私の知る限り、このdeinitメソッドはインスタンスが初期化解除される直前に呼び出され、必要なこと (クリーンアップ、ファイルを閉じる、ネットワーク接続を終了するなど) を行う最後の機会を提供します。

ドキュメンテーションによると、 が呼び出された時点deinitでは、オブジェクトはまだ初期化されていないため (ただし、すぐに初期化される予定です)、(最後に) そのプロパティにアクセスできます。

于 2015-11-06T06:54:17.253 に答える