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

前端之家收集整理的这篇文章主要介绍了ios – 如果我将自动释放的对象桥接到Core Foundation,我必须使用__bridge或__bridge_retained吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
ARC迁移工具遇到了这个问题:
NSURL *fileURL = [NSURL fileURLWithPath:path];
AudioFileOpenURL((CFURLRef)fileURL,kAudioFileReadPermission,&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相关文章