0

私がこの権利を求めているかどうかはわかりませんが、とにかく試してみます。

この小さなコードを呼び出すプログラムがあります...

[localCalculateTimeFiles addObserver:self
       forKeyPath:@"arraystatuscounter"
          options:NSKeyValueObservingOptionNew
          context:NULL];

最終的にlocalCalculateTimeFilesがなくなり、現在のコードのビットを削除したいと思います(大雑把に言えば)。何もせず、適切なremoveObserverを実行せずにlocalCalculateTimesFilesが消えると、ランタイムは例外をスローします。以前はもっと警告だったと思いますが、今ではプログラムが異常終了します。

すべてのオブジェクトポインタを適切なタイミングで適切な場所に配置するとします。私がやりたいのは、localCalculateTimeFilesに、割り当て解除の途中で(いわば)オブザーバーを削除させることです。

Appleのドキュメントによると、localCalculateTimeFilesに次のようなメソッドを追加して作業を行うことができるようです...

- (void)finalize {
    if (log_file != NULL) {
        fclose(log_file);
        log_file = NULL;
    }
    [super finalize]; 
}

log_fileを処理するためのロジックを、オブザーバーの登録を解除する新しいロジックに置き換えます。明らかに、removeObserverメソッドが操作する適切な項目を持っていることを確認するために、すべてのポインターが正しいことを確認する必要があります。私にそれをきちんとやらせてください、これは理にかなっていますか、それとも私は完全にオフですか?

4

1 に答える 1

4

ファイナライズがこれの正しい場所だとは思いません。

監視の登録を解除する最適な場所はdealloc、オブジェクトが削除される直前に呼び出されるメソッド内です。

于 2012-11-04T05:27:55.290 に答える