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对象.