ios - 如果我将自动释放的对象桥接到 Core Foundation,我必须使用 __bridge 或 __bridge_retained 吗?

标签 ios memory-management automatic-ref-counting

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/

相关文章:

c - 在使用 realloc 之前是否需要释放指针变量?

c++ - C++ 中的指针存储在哪里,在堆栈中还是在堆中?

c - 大小 8 和其他内容的无效读取

iphone - Objective-C 自动引用计数和垃圾回收有什么区别?

objective-c - 可以在同一个属性声明中同时使用strong和retain吗?

ios - CloudKit更新通知可以将应用程序从 "Not running"状态唤醒吗?

ios - 内在内容大小在UITableView内部的UICollectionView

ios - 弹回 View Controller 时使用 ARC 的 EXC_BAD_ACCESS

ios - AppDelegate.m 需要将数据发送到单独的 ViewController 的 WebView

ios - 即使应用程序被杀死,计划任务