3

関数で、時々破損する可能性のあるオブジェクトを処理していますが、実行時に、オブジェクトが破損しているかどうかをどうにかして判断できますか?

4

3 に答える 3

6

__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ときに確認してください)。objectnil

__weakまた、特にフレームワークを作成している場合は、変数のみに基づいたデザイン パターンを使用しないように注意してください。ターゲット展開として iOS 5 を使用しなければならないことほど「面倒」なことはありません。

この投稿が、弱参照がどのように機能するかをより深く理解するのに役立つことを願っています。そうでない場合は、ここで読むことができる優れたウィキペディアの記事があります。

http://en.wikipedia.org/wiki/Weak_reference

于 2012-09-05T12:08:33.827 に答える
0

オブジェクトがであると仮定してNSObject、Instrumentsでゾンビを有効にするだけです。次に、問題のオブジェクトにメッセージを送信するだけです。メッセージを送信すると、オブジェクトが停止しているかどうかが通知されます。

于 2012-09-05T12:12:14.663 に答える
0

簡単に言えば、いいえ、オブジェクトの割り当てが解除されたかどうかを確認する方法はありません。詳細については、この質問をご覧ください。

于 2012-09-05T11:56:37.930 に答える