我在单例类的结构中将 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]然后用strlcpyto复制它struct1.string1。这种方法具有相同的结果。
将 a的值存储在结构中的正确技术是什么?NSString如何char *确保该结构中的字段在SingletonClass不同类使用时保持其值?