我在单例类的结构中将 an 的值分配NSString
给 a时遇到问题。char *
以下是我的问题的简化。我的代码在结构中使用了更多的字段并传递了更多NSString
的 s。
假设我有一个带有结构的单例类“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
从一个班级打电话并尝试useCharArray
从另一个班级打电话时struct1.string1
是一堆垃圾。在调试过程中,我已经确认每个类都获得了相同的 this 实例SingletonClass
。
我还在学习 Objective-C 和 C,所以我知道这可能是我的内存管理的问题。我知道我[NSString cStringUsingEncoding]
应该分配给 aconst char *
而不是 a char *
,但我不知道该怎么做,因为结构中的字段是 a char *
。我尝试了其他方法,initSructWithString
例如分配一个新const char *
的结果,[NSString cStringUsingEncoding]
然后用strlcpy
to复制它struct1.string1
。这种方法具有相同的结果。
将 a的值存储在结构中的正确技术是什么?NSString
如何char *
确保该结构中的字段在SingletonClass
不同类使用时保持其值?