シングルトン クラスの構造内で an の値NSString
を aに割り当てるのに問題があります。char *
以下は私の問題を単純化したものです。私のコードは、構造体でより多くのフィールドを利用し、より多くNSString
の を渡します。
構造を持つシングルトンクラス「SingletonClass」があるとします(Appleドキュメントで宿題を行い、正しく実装しました):
struct sampleStruct {
char *string1;
//other fields
} struct1;
struct1.string1
渡された NSStringの値を設定するこのメソッドを使用します。
- (void)initStructWithString:(NSString *)inputString {
//warning: assignment discards qualifiers from pointer target type
struct1.string1 = [inputString cStringUsingEncoding:NSUTF8StringEncoding];
}
そして、次を使用するこのメソッドstruct1.string1
:
- (void)useCharArray {
//I would obviously be doing something more complex in reality
printf("This is the char array: %s", struct1.string1);
//doesn't print the value I assigned to it, but garbage
}
あるクラスから呼び出して別のクラスinitStructWithString:(NSString *)inputString
から呼び出そうとすると、ゴミの山です。デバッグ中に、各クラスが this の同じインスタンスを取得していることを確認しました。useCharArray
struct1.string1
SingletonClass
私はまだObjective-CとCを学んでいるので、メモリ管理に問題がある可能性があることを認識しています。a ではなく a[NSString cStringUsingEncoding]
に割り当てる必要があることはわかっていますが、構造内のフィールドが a であるため、他にどのように対処すればよいかわかりません。新しい結果を割り当ててからコピーするなど、他のアプローチを試しました。そのアプローチは同じ結果をもたらしました。const char *
char *
char *
initSructWithString
const char *
[NSString cStringUsingEncoding]
strlcpy
struct1.string1
NSString
anの値を構造体内に格納するための正しい手法は何ですか?また、char *
この構造体内のフィールドがSingletonClass
異なるクラスで使用されているため、値を確実に保持するにはどうすればよいですか?