假设我从某个函数中获取了一个 C 字符串:
char * mystring = SomeCFunction(...);
我拥有这个字符串(我负责在完成后释放它)。
如果在 Objective-C 中,我创建一个 NSString *
使用:
NSString * mynsstring = [NSString stringWithCString:mystring
encoding:NSUTF8StringEncoding];
我是否仍然负责释放原始 C 字符串?
我假设答案是肯定的,但我无法在文档中找到明确的答案 - 相反方法 (cStringUsingEncoding
) 的功能虽然合理,但确实让我停顿了一下,因为它会为您处理 cString 释放。
如果答案是肯定的,那么我是否还要负责确保在使用完 NSString *
之前我没有释放 c 字符串,或者函数是否复制字符串用于我?我问这个是因为 stringWithCString
的文档说:
Returns a string containing the bytes in a given C array, interpreted according to a given encoding.
这仍然让我想知道它是否真的复制了字节,或者只是在内部指向它们(我基本上只是在进行转换)。
最佳答案
它确实复制字节。
如果你不想复制字节,你可以使用 - (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding freeWhenDone:(BOOL)flag
代替。
如果你使用- (id)initWithBytes:(const void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding
,或者像stringWithCString:encoding这样的任何商品方法:
本身调用这个低级方法,字节被复制。
关于objective-c - 内存管理 : NSString's stringWithCString:encoding:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7895152/