は、私はいくつかの関数からC文字列取得していたとしますメモリ管理:NSStringののstringWithCString:エンコーディング:
char * mystring = SomeCFunction(...);
をそして、私はこの文字列を所有して(私は終わりだときにそれを解放する責任です)。
Objective-Cで、私が使用してNSString *
を作成、場合:
NSString * mynsstring = [NSString stringWithCString:mystring
encoding:NSUTF8StringEncoding];
は、元のC文字列を解放するために、私はまだ担当していますか?
私は答えがイエスだと仮定していますが、ドキュメントで決定的な答えを見つけることができません。反対の方法(cStringUsingEncoding
)の機能は、官能的ですが、あなたのためにcStringを解放する。
回答が「はい」の場合は、NSString *
を使用する前にC文字列を解放しないようにするか、関数が文字列をコピーしますか?
は、与えられたCの配列でバイトを含む文字列を返します。与えられたエンコーディングに従って を解釈:
stringWithCString
のドキュメントがそれを言うので、私はこれを頼みます。
これは実際にバイトをコピーしたのか、それとも内部的に指しているのか不思議に思っています(基本的にはキャストしています)。
ああ!あなたは素晴らしいです。ありがとうございました!受け入れブロックタイマーの残りの6分が切れた後、私は答えを受け入れます。 – Steve
これはドキュメントにある必要があります –
@AndréFratelliフィードバックを提出することをお勧めします(オンラインドキュメントの各ページの下にリンクがあります)ので、Appleはこれを追加します;-) – AliSoftware