2011-08-04 5 views
1

インスタンス変数にパラメータで与えられたオブジェクトを代入してみましょう。私はこのオブジェクトが何であるか分からないので、私はそれを保持したくありません。しかし、そのオブジェクトへの参照は、オブジェクトが解放されたり解放されようとしている(たとえば、自動解放プール)場合など、しばらく無効になる可能性があります。したがって、私のクラスインスタンスの中で、私がインスタンス変数に保持していた参照をクラッシュの危険なしに使用できるかどうかを知ることができますか?iPhone - 参照が(まだ)有効かどうかを知る方法はありますか?

答えて

1

Kris Van Baelは、オブジェクトが何であるかを知っていても、オブジェクトの所有権を持ちたい場合(オブジェクトが生きているかどうかを確認する場合)、オブジェクトを保持する必要があります。それを必要としないときに解放し、参照をNILに設定します(セキュリティのため)。

ただし、例外はです!

所有権を持ちたくない場合がありますが、最も一般的な例は代理人です。 デリゲートを保持したくないのはおそらくすでにあなたを保持しているからであり、両方のオブジェクトがdeallocメソッドで互いに解放されていると、アプリケーションがリークします。

しかし、この場合、デリゲートの割り当てを気にする必要はありません。デリゲートはdeallocメソッドで "デリゲート"プロパティをnilに設定する必要があります。

ですから、オブジェクトの所有権を持っている場合

  • :保持、選択の余地!
  • オブジェクトがあなたに所有権を持っている場合は、割り当てしても問題ありません。
+0

これはまさに私が探していたものでした。ありがとうございました ! – Oliver

0

リリースリファレンスをNILに設定し、NILを確認する必要があります。

+0

私は、オリバーは外部のオブジェクトが他のどこかで公開されることを心配していると思います。 –

+0

@Kris Van Bael:はい、それはそれです – Oliver

2

必要がなくなったら保持して放す必要があります。それはまさに保持するものです。

1

このアプローチは本当に危険です。あなたのアプリがオブジェクトのライフサイクルを追跡できない場合、これを制御できるようにコードを変更する必要があります。 とにかくあなたの質問に答える:インスタンス変数をクラスに余分に保持し、必要がなくなったら解放することでインスタンス変数を保護することができます。だからあなたはあなたが求めている小切手をする必要はありません。

関連する問題