【发布时间】:2015-04-06 15:05:08
【问题描述】:
我有一个 NSTextField 并像这样获取它的内容
NSString *s = [textField stringValue]
现在我想将此 NSString 转换为我的平台无关 C 代码可以处理的字符串。因此我正在这样做:
const char *cstr = [s cStringUsingEncoding:NSISOLatin1StringEncoding];
我现在不明白这个“cstr”指针保持有效的时间有多长。 cStringUsingEncoding 的 Apple 文档说:
保证返回的 C 字符串仅在 接收器被释放,或者直到当前内存被清空,以哪个为准 首先发生。您应该复制 C 字符串或使用 getCString:maxLength:encoding: 如果需要存储C字符串 超过这个时间。
关于这个的两个问题:
我想前面提到的“接收者”是 [textField stringValue] 返回的 NSString。既然我不拥有这个 NSString ,我怎么知道它什么时候会被释放?假设在释放 NSTextField 小部件之前不会释放此 NSString 是否安全?
“直到当前内存被清空”是什么意思?我完全不明白。
当然,我可以直接复制一份,但我想了解 cStringUsingEncoding 返回的字符串指针的有效时间。
我知道这里有几个类似的问题,但没有人能真正回答我的问题,因为在我的情况下,NSString 的所有者是 NSTextField 小部件,我不知道这个小部件何时会释放 NSString 或者它是否保持有效对于小部件本身的整个生命周期。
【问题讨论】:
标签: objective-c cocoa nsstring