toll-free bridging when to release?

简要言之,就是CF(core foundation) 和 Foundation 之间的某些对象可以无缝强制转换。
e.g. NSLocale 和 CFLocaleRef ,强转就可以直接用了!

NSLocale *gbNSLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
CFLocaleRef gbCFLocale = (__bridge CFLocaleRef)gbNSLocale;//不转移所有权,还是归arc管理计数
CFStringRef cfIdentifier = CFLocaleGetIdentifier(gbCFLocale);
NSLog(@"cfIdentifier: %@", (__bridge NSString *)cfIdentifier);
// Logs: "cfIdentifier: en_GB"

CFLocaleRef myCFLocale = CFLocaleCopyCurrent();//有copy,create等字眼,就拥有了cf对象了,需要手动管理计数
NSLocale *myNSLocale = (NSLocale *)CFBridgingRelease(myCFLocale);//所用权移交arc
NSString *nsIdentifier = [myNSLocale localeIdentifier];
CFShow((CFStringRef)[@"nsIdentifier: " stringByAppendingString:nsIdentifier]);

when to release?

普通的bridge oc->cf,是不用手动管理计数的。
根据wwdc2012,有create,copy或__bridge_retained等字眼,才需要手动CFBridgingRelease()。

参考:

https://stackoverflow.com/questions/14064336/arc-and-cfrelease