2012-04-21 7 views

答えて

1

いいえ。メモリは、保持カウントに基づいて割り当て解除されます。 0になると、それを指し示す変数の値にかかわらず、割り当てが解除されます。変数をnilに設定するのは良い方法です。割り当てられていないメモリにアクセスしようとしないでください。変数がスコープ(あなたのメソッドが返すまたはブロッククローズ)の外に出たとき

+0

このコードはなぜ機能しますか? 'self.a = @" Hello "; [self.a release]; NSLog(@ "%@"、self.a); ' と' Hello'を表示します –

+0

@AkshitZaveri良い質問。割り当て解除が発生したときにはルールがありますが、これはランタイムによって管理されます。 NSStringは特に魔法です:https://stackoverflow.com/a/1390394/901059ランタイムは、観察された振る舞いよりもルールに従うことに依存しています。 – mydogisbox

1

あなたはARCを使用している場合は、任意の強い変数がリリースされます。変数を末尾にnilに設定しても効果はありません。

ARCを使用していない場合は、所有するオブジェクトにreleaseまたはautoreleaseと必ず電話してください。それが完了すると、あなたはそのオブジェクトに対するあなたの主張を取り除き、それを割り当て解除することができます。

1

nilに設定するのは、プロパティを設定するためにsetFoo:メソッドまたはdot notionを使用する場合だけです。ドット表記法またはメソッドを使用する代わりにインスタンス変数をnilに設定するだけでは、実際にメモリがリークします。これを念頭に置いて、なぜ、いいえ、ローカル変数をnilに設定しても何の効果もありません。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.htmlを参照すると、参照カウントの仕組みがわかります。基本的には、あなたがそれにallocを呼び出した場合、あなたはまたそれを解放する必要があります。

関連する問題