我有以下代码段:
-(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];
导致无用的字符链。 当我从函数中返回正确的值时,有什么东西会破坏我的编码吗?我该怎么办?
答案 0 :(得分:1)
没有自动CFTypeRef内存管理。如果你要返回一个NSString,它将被自动释放。对于CFStringRef不是这样。所以你必须自己做这项工作。
您需要使用CFRetain保留CFStringRef并进行__bridge_retained
强制转换,而不是__bridge
强制转换。您正在跨越从对象世界到CFTypeRef世界的桥梁;您必须在跨越网桥时对此字符串提供内存管理。然后,您需要稍后在接收代码中手动释放CFStringRef,否则它将泄漏。