関数で、時々破損する可能性のあるオブジェクトを処理していますが、実行時に、オブジェクトが破損しているかどうかをどうにかして判断できますか?
3 に答える
__weak
これを実際に行う唯一の方法は、ポインターと呼ばれる ARC (および iOS 5 では動作しません) で新しいものを活用することです。
__weak
定義上、変数は保持されないことにも注意してください。変数がそのターゲットを保持している場合、__weak
定義上、それ自体を解放することはできません。
基本的に、ポインターは、割り当てが解除されたときにそれ__weak
自体を自動的に設定する変数です。NULL
したがって、次のようにして、オブジェクトの割り当てが解除されているかどうかを判断できます。
__strong id object; // required so that the object doesn't get deallocated right away
__weak id _weakRef;
object = [NSObject new];
_weakRef = object;
// do stuff with 'object'
if (_weakRef)
{
// 'object' hasn't been deallocated yet, do something with it.
}
通常、オブジェクトへの強い参照と弱い参照を保持することはありませんが、これは役に立たないためです ( に設定する_weakRef
ときに確認してください)。object
nil
__weak
また、特にフレームワークを作成している場合は、変数のみに基づいたデザイン パターンを使用しないように注意してください。ターゲット展開として iOS 5 を使用しなければならないことほど「面倒」なことはありません。
この投稿が、弱参照がどのように機能するかをより深く理解するのに役立つことを願っています。そうでない場合は、ここで読むことができる優れたウィキペディアの記事があります。
オブジェクトがであると仮定してNSObject
、Instrumentsでゾンビを有効にするだけです。次に、問題のオブジェクトにメッセージを送信するだけです。メッセージを送信すると、オブジェクトが停止しているかどうかが通知されます。
簡単に言えば、いいえ、オブジェクトの割り当てが解除されたかどうかを確認する方法はありません。詳細については、この質問をご覧ください。