我必须使用__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对象。