解放する前にクリーンアップする必要があるオブジェクトの辞書があります。辞書全体に対してこれを行うメソッドがあります。メソッドで辞書を解放する前に-dealloc
、同じことをしたいと思います。ただし、解放中のオブジェクトの状態はわかりません。たとえば、C# や Java では、ファイナライズされるオブジェクトでメソッドを呼び出すことはありませんが、これが Objective C と割り当て解除に適用されるかどうかはわかりません。self
割り当て解除中にクリーンアップ メソッドを呼び出すことは許容されます-dealloc
か?
3456 次
1 に答える
11
dealloc
はい、慎重に行うのが賢明ですが、メソッド内からメソッドを呼び出すことができます。ほとんどの場合、呼び出す必要がある唯一のメソッドは、「破棄」メソッド、またはリソースが再利用される前にオブジェクトをクリーンアップするのに役立つメソッドです。これらのクリーンアップ方法には、次のようなものがあります。
- 通知センターを介した通知の登録解除
- 自分自身をキー値オブザーバーとして削除する
- その他の一般的なクリーンアップ方法
ただし、これらの各メソッドでは、オブジェクトが一貫性のない状態になることに注意してください。部分的に割り当てが解除される可能性があるため (一部の ivar は無効になる可能性があります)、特定のオブジェクトの状態に依存しないでください。これらのメソッドは、オブジェクトの状態を分解し続けるためにのみ使用してください。
setFoo:
これが、 でプロパティ セッター (メソッド)を使用することをお勧めしない根本的な理由ですdealloc
。別のオブジェクトがオブザーバーとして登録されている可能性があり、プロパティを使用すると KVO 通知がトリガーされ、オブザーバーがオブジェクトに有効な運が悪い可能性があり、物事が非常に急速に爆発する可能性があります。
TL;DR:
はい、あなたが賢明である限り、安全です。
于 2011-02-23T17:49:15.557 に答える