私は、ローカル変数を使用後に変数の割り当てを解除するためにnilに設定する必要があるのだろうかと疑問に思っていますか?目的c:ローカル変数はメモリを解放するために使用した後にnilに設定する必要がありますか?
2
A
答えて
1
いいえ。メモリは、保持カウントに基づいて割り当て解除されます。 0になると、それを指し示す変数の値にかかわらず、割り当てが解除されます。変数をnilに設定するのは良い方法です。割り当てられていないメモリにアクセスしようとしないでください。変数がスコープ(あなたのメソッドが返すまたはブロッククローズ)の外に出たとき
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を呼び出した場合、あなたはまたそれを解放する必要があります。
関連する問題
- 1. Objective-c 2.0のプロパティのメモリを解放する必要がありますか?
- 2. スレッドオブジェクトを解放する必要がありますか? C#
- 3. メモリを後で解放する目的でメモリを埋める方法は?
- 4. NSKeyedUnarchiverを使用してfinishDecodingした後で解放する必要がありますか?
- 5. 呼び出し後にInterop構造メモリを解放する必要がありますか?
- 6. UIPageViewController設定のビューコントローラは解放する必要がありますか?
- 7. 割り当て後にどこでメモリを解放する必要がありますか?
- 8. ナビゲーションコントローラーにプッシュした後にviewcontrollerのオブジェクトを解放する必要がありますか?
- 9. BitmapImageが不要になった後にメモリを解放するには?
- 10. デリゲートをクラス内でnilに設定する必要がありますか?
- 11. マネージコードによってロードされたアンマネージコードでメモリを解放する必要がありますか
- 12. C++クラスの "ヘルパー関数"はメンバ、フリー、またはanon-namespaceを解放する必要がありますか?
- 13. deallocでインスタンス変数とプロパティを解放する必要がありますか?
- 14. はミューテックスを解放する必要がありますか?
- 15. PHPは関数の終了直後にローカル変数を解放しますか?
- 16. ARCを使用する場合でもメモリを解放する必要がありますか?
- 17. メソッド内でクラスプロパティを設定するときに、それを解放する必要がありますか?
- 18. newHVで作成したHV *を解放する必要はありますか?
- 19. オブジェクトを解放し、それをアトミックにする必要がありますか?
- 20. Java:JDKをWindowsにインストールした後に設定する必要のある環境変数は何ですか?
- 21. mitmproxy:プロキシサーバーをローカルに設定する必要がありますか?
- 22. Objective-Cで動的に作成されたオブジェクトを削除するときに、何をnilに設定する必要がありますか?
- 23. どのメモリの静的変数にローカル変数がありますか?
- 24. このコードにメモリがリークしていますか?私は何かを解放する必要がありますか? C++メモリ
- 25. xibリソースを解放する必要がありますか?
- 26. NSMutableArrayのオブジェクトを解放する必要がありますか?
- 27. Pythonで使用した後にバッファスペースを解放しますか?
- 28. 目的C - ポップ時にメモリを解放しないUITableViewControllerシーン
- 29. なぜオブジェクトを解放した後に 'nil'を使うのですか
- 30. C++プログラムを作成するためにEclipseを設定する必要はありますか?
このコードはなぜ機能しますか? 'self.a = @" Hello "; [self.a release]; NSLog(@ "%@"、self.a); ' と' Hello'を表示します –
@AkshitZaveri良い質問。割り当て解除が発生したときにはルールがありますが、これはランタイムによって管理されます。 NSStringは特に魔法です:https://stackoverflow.com/a/1390394/901059ランタイムは、観察された振る舞いよりもルールに従うことに依存しています。 – mydogisbox