如果我将自动发布的对象桥接到 Core Foundation,我必须使用 __bridge 或 __bridge_retained 吗?
Posted
技术标签:
【中文标题】如果我将自动发布的对象桥接到 Core Foundation,我必须使用 __bridge 或 __bridge_retained 吗?【英文标题】:Must I use __bridge or __bridge_retained if I'm bridging an autoreleased object to Core Foundation? 【发布时间】:2012-02-09 04:57:48 【问题描述】:ARC 迁移工具遇到问题:
NSURL *fileURL = [NSURL fileURLWithPath:path];
AudioFileOpenURL((CFURLRef)fileURL, kAudioFileReadPermission, 0, &fileID);
特别是,它不确定是否应该执行 __bridge 或 __bridge_retained。我也是。
-fileURLWithPath 返回一个自动释放的对象,在这个地方我不是 fileURL 的所有者。但同时,该对象的保留计数至少为 +1。
我敢打赌这只能用 __bridge 来完成。
【问题讨论】:
【参考方案1】:您只想为此使用常规的__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 对象。
【讨论】:
以上是关于如果我将自动发布的对象桥接到 Core Foundation,我必须使用 __bridge 或 __bridge_retained 吗?的主要内容,如果未能解决你的问题,请参考以下文章
Swift 无法将 NSNumber 桥接到 Float [重复]