2012-05-05 14 views
-4

私はJavaのバックグラウンドから来ていますので、私はメモリ管理に関心があります。メモリをNSString * str = @ "hi";から解放する必要がありますか?私はNSStringを解放する必要があります* str = [[NSString alloc init]?私が合成するUILabelはどうですか?メモリ管理ios

+2

手動管理の代わりにARCを使用すると、これらの問題はすべて解決されます。 –

+2

そして、投稿する前にドキュメントを読んだり、ここで検索してみてください。これは死に至った。 – jrturton

+1

...これは大きな質問ですが、Richard - それは特に有益なコメントではありません。 ARCを使用していても、iOSのメモリ管理がどのように機能しているかを理解することは非常に便利で、ARCはすべての問題を「解決」しません。 – lxt

答えて

2

ケースNSString *str = @"hi";コンパイル時定数文字列オブジェクト(所有者ではありません)のため、文字列を解放する必要はありません。 2番目のケースNSString *str = [[NSString alloc] init]では、所有者であるためにリリースする必要があります。メモリを割り当てているので、責任を負います。

retainまたはcopyのようなプロパティを宣言する場合は、synthesizeプロパティを解放する必要があります。通常、それらを解放する良いサイトはdeallocメソッドです。

このApple docをお読みください。大型ですが便利です;)

+0

合成したUILabelはどうなりますか? – user2514963

2

ARCメモリ管理でこれを行う必要はありません。詳細については、thisリンクをご覧ください。Googleで「ARCメモリ管理」を検索するだけです。

メモリを手動で管理したい場合は、ARCをオフにすることができます。クイックメモリ管理チュートリアルのリンクthisをご覧ください。

編集:iOS 5を使用していない場合は、手動でメモリを管理する必要があります。あなたの質問「私は何を合成したものUILabelについて、」あなたがそれらを解放する方法を求めている場合は、単に

- (void)dealloc 

内のすべてのリリース文を呼び出すことが賢明だろう

[label release]; 

を呼び出しに応答して、例:

- (void)dealloc { 
    [label release]; 
    [super dealloc]; 
} 
+0

私はIOS5を使用していません – user2514963

+0

ARCはコンパイラベースのメモリ管理戦略です。私はそれが4.0以上のSDKを必要としているとは思うが、それはあなたが展開しているiOSには無関係です。 – isaac

+0

私の編集を参照してください。また、ARCはiOS 4でも動作します。 – DGund