我必须使用__bridge或__bridge_retained,如果我将自动发布的对象桥接到核心基础?

ARC迁移工具遇到这个问题:

NSURL *fileURL = [NSURL fileURLWithPath:path]; AudioFileOpenURL((CFURLRef)fileURL, kAudioFileReadPermission, 0, &fileID); 

特别是,它不知道是否应该做__bridge或__bridge_retained。 而我也是。

-fileURLWithPath返回一个自动释放的对象,在这个地方,我不是fileURL的所有者。 但与此同时,对象的保留计数至less为+1。

我敢打赌,这只能用__bridge来完成。

你只想使用常规的__bridge 。 只有当你想pipe理一个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对象,现在你想基本上把它变成一个你要直接pipe理的CF对象。