2010-11-25 7 views

答えて

0

それがnilにメッセージを送信するためにOKですので、あなたは自分に関係なく何のdeallocでの特性を保持解放する必要があります。プロパティーが使用されていない場合、それはゼロになり、リリースを送信することは事実上ノーオペレーションです。

+0

いくつかの例でオンラインで次のコードを見たことがあります。if(iVar!= nil)[iVar release]; iVarは保持されたプロパティです。 if文には何らかの理由がありますか? – Glynton

+0

@Glynton:いいえ、時間の無駄です。 'nil'はメッセージを受け取ることができるように文書化されています。 return 0/nil以外は何もしません。 – JeremyP

2

deallocで割り当てまたは保持するオブジェクトはすべて解放する必要があります。

インターフェイスビルダーで参照されている場合は、ビューコントローラのviewDidUnload()で解放してnilに設定し、deallocを解放したい場合もあります。

+0

これは単なる良い練習ではなく、あなたがするべきことです。 –

0

保持されているプロパティでreleaseを呼び出す必要はありません。 setterメソッドは、null値を与えることで解放されるように実装されています。あなたのdeallocメソッドでは、単にゼロに設定します。

self.someProperty = nil; 
+0

このアプローチではリスクがあります。何かがまだ 'someProperty'を観察している場合、オブジェクトの' dealloc'の間に、状態がかなり未定義であることが保証されている変更通知を得るでしょう。 – bbum

+0

somePropertyがサブクラスでオーバーライドされている場合も同様です。 – JeremyP

関連する問題