疑問に思っていますが、使用後に変数の割り当てを解除するには、ローカル変数をnilに設定する必要がありますか?
3 に答える
いいえ。メモリは、保持カウントに基づいて割り当てが解除されます。それがゼロになると、それを指していた変数の値に関係なく、割り当てが解除されます。変数をnilに設定することは、割り当て解除されたメモリにアクセスしようとしないようにするための良い習慣です。
いいえ。
ARCを使用している場合、変数がスコープ外になると(メソッドが戻るか、ブロックが閉じると)、強力な変数が解放されます。最後に変数をに設定しnil
ても効果はありません。
ARCを使用していない場合は、必ず、release
またはautorelease
所有しているオブジェクトを呼び出してください。それが完了すると、オブジェクトに対するクレームが削除され、割り当てを解除できます。
nilに設定すると効果があるのは、setFoo:メソッドまたはドット表記を使用してプロパティを設定する場合のみです。ドット表記やメソッドを使用する代わりに、インスタンス変数をnilに設定するだけでは、実際にメモリがリークします。これを念頭に置いて、ローカル変数をnilに設定してもまったく効果がない理由がわかります。
参照カウントがどのように機能するかをよりよく理解するには、https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.htmlを参照してください。基本的に、allocを呼び出した場合は、それも解放する必要があります。