0

我有以下代码片段:

-(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];

它会导致无用的字符链。当我从函数返回正确的值时,是否有什么东西破坏了我的编码?我能做些什么?

4

1 回答 1

1

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

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

于 2016-07-29T15:36:54.980 回答