NSString *到CFStringRef导致无用的char数组

时间:2016-07-29 15:30:38

标签: ios objective-c encoding nsstring cfstring

我有以下代码段:

-(CFStringRef)setupFileName:(NSString*)_name :(NSString*)_extension
{
NSString* tmpName = [_name stringByAppendingString:_extension];
CFStringRef ref = (__bridge CFStringRef)tmpName;
return ref;
}

当我在return语句中断时,ref包含正确的数据,一个带扩展名的好字符串。 但是当我像这样使用它时:

CFStringRef tickWav = [self setupFileName:_name :kTick];

导致无用的字符链。 当我从函数中返回正确的值时,有什么东西会破坏我的编码吗?我该怎么办?

1 个答案:

答案 0 :(得分:1)

没有自动CFTypeRef内存管理。如果你要返回一个NSString,它将被自动释放。对于CFStringRef不是这样。所以你必须自己做这项工作。

您需要使用CFRetain保留CFStringRef并进行__bridge_retained强制转换,而不是__bridge强制转换。您正在跨越从对象世界到CFTypeRef世界的桥梁;您必须在跨越网桥时对此字符串提供内存管理。然后,您需要稍后在接收代码中手动释放CFStringRef,否则它将泄漏。