我有一个的NSTextField并获得它的内容,像这样
NSString *s = [textField stringValue]
现在我想这个的NSString转换为我的独立于平台的C代码可以处理的字符串。 因此,我在做:
const char *cstr = [s cStringUsingEncoding:NSISOLatin1StringEncoding];
我不明白,现在这个“CSTR”指针保持多久有效。 苹果文档的cStringUsingEncoding说:
返回的C字符串被保证是唯一有效,直到该接收器被释放时,或直到当前存储器被清空,以先到者为准。 您应该复制的C字符串或使用getCString:最大长度:编码:如果需要存储C字符串超出这个时间。
这个两个问题:
我想上述“接收器”是由[文本字段stringValue的]返回的NSString。 由于我并不拥有这个NSString的我怎么能知道何时会被释放? 它是安全的假设,这个的NSString不会被释放的窗口小部件的NSTextField将释放之前?
是什么“直到目前的内存空”的意思准确? 我完全不明白这一点。
当然,我可能只是继续前进,使副本,但我想了解由cStringUsingEncoding返回的字符串指针的有效期。
我知道这里有几个类似的问题,但没有人能真正回答我的问题,因为在我的情况,NSString的所有者是的NSTextField控件,我不知道什么时候这个小部件将释放的NSString,或者如果它保持有效完整寿命的部件本身。