0

ヘッダーにconstcharを次のように定義しました

const char *storageIcon;

@property (assign) const char *storageIcon;

私の辞書には単一の文字である文字列値がありますが、それを変数に配置するための正しい方法の下にあるコードは傷ついていますか?

storageIcon = [[tempDict valueForKey:@"STORAGEICON"] UTF8String];

問題は、後でこの要素が破損することです。ほとんどメモリリークが発生しているようで、何が問題になっているのか理解できません。

ヘルプ/ヒントをいただければ幸いです。

4

1 に答える 1

1

のドキュメントからNSString UTF8String

返されたC文字列は、返されたオブジェクトが解放されるのと同じように自動的に解放されます。C文字列が作成された自動解放コンテキストの外部に格納する必要がある場合は、C文字列をコピーする必要があります。

この「間もなく解放される」C文字列ポインタを割り当てられたプロパティに割り当てています。基本的に、値はすぐに失われます。

mallocプロパティのsetterメソッドとgetterメソッドを適切に使用するかfree、プロパティをより簡単にして、プロパティをのNSString代わりに変更することができconst char *ます。

実際のC文字列を必要とするプロパティのクライアントは、UTF8String必要に応じてメソッドを呼び出すことができます。

もう1つ。あなたの質問のタイトルは、単一のキャラクターについて話します。ではcharなく、char *です。の最初の文字が本当にNSString必要な場合は、現在行っているものとは異なるアプローチが必要です。

于 2013-03-03T21:48:38.123 に答える