リテラルNSStringは自動リリースされますか、それともリリースする必要がありますか?

StackOverflow https://stackoverflow.com/questions/329977

質問

次の表記法を使用して文字列を作成する場合:

NSString *foo = @"Bar";

foo をリリースする必要がありますか?または、この場合 foo は自動リリースされますか?

役に立ちましたか?

解決

コンパイラが割り当てた文字列(@" STRING"形式)は定数であるため、それらへの-retain、-release、および-autoreleaseメッセージは無視されます。この場合、fooを解放または自動解放する必要はありません(ただし、害はありません)。

他のヒント

ドキュメントに記載されているとおり

http://developer.apple.com/documentation/ Cocoa / Conceptual / MemoryMgmt / Tasks / MemoryManagementRules.html

  

次の場合、オブジェクトの所有権を取得します   名前を持つメソッドを使用して作成します   “ alloc”で始まりますまたは“ new”または   含まれています“コピー” (たとえば、alloc、   newObject、またはmutableCopy)、または   保持メッセージを送信します。あなたは   放棄の責任   所有しているオブジェクトの所有権   リリースまたは自動リリース。それ以外の時間   あなたは物を受け取ります、あなたはしてはいけません   リリースします。

alloc、copyなどを使用していないので、オブジェクトのリリースについて心配する必要はありません。

「コンパイラが割り当てた文字列(@" STRING"の形式)は定数です」で@Ben \ Gottliebに同意します;ただし、 alloc または retain メッセージを渡して初期化していないため、 release または autorelease を渡してはなりません。そうしないと、アプリは次のログでクラッシュします

  

"解放されるポインターは   割り当てられた"

NSString *str = [NSString string];

は次と同等です:

NSString *str = [[[NSString alloc] init] autorelease];

so release または autorelease もここに渡さないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top