ARC 迁移工具遇到了这个问题:
NSURL *fileURL = [NSURL fileURLWithPath:path];
AudioFileOpenURL((CFURLRef)fileURL, kAudioFileReadPermission, 0, &fileID);
特别是,它不确定是否应该执行 __bridge 或 __bridge_retained。我也是。
-fileURLWithPath 返回一个自动释放的对象,在这个地方我不是 fileURL 的所有者。但与此同时,该对象的保留计数至少为 +1。
我敢打赌这只能用 __bridge 来完成。
最佳答案
您只想为此使用常规的 __bridge
转换。只有当您想要管理一个转换 CF 对象的生命周期时,您才会使用 __bridge_retained
。例如:
CFStringRef cf_string = (__bridge_retained CFStringRef)someNSString;
// some long time later, perhaps in another method etc
CFRelease(cf_string);
所以 __bridge_retained
实际上是在告诉编译器您有一个 ARC 对象,现在您想基本上将其转换为您要直接管理的 CF 对象。
关于ios - 如果我将自动释放的对象桥接到 Core Foundation,我必须使用 __bridge 或 __bridge_retained 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8842953/