【问题标题】:Must I use __bridge or __bridge_retained if I'm bridging an autoreleased object to Core Foundation?如果我将自动发布的对象桥接到 Core Foundation,我必须使用 __bridge 或 __bridge_retained 吗?
【发布时间】: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 来完成。

【问题讨论】:

    标签: ios memory-management automatic-ref-counting


    【解决方案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 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多