Core Foundateion是C语言的接口,Foundation是OC的接口,有ARC来管理内存,Core Foundation需要自己管理内存。 涉及到Core Foundation的结构体转化到Foundation的对象或者反过来的时候,需要用到上述3个关键字。
__bridge,CF和OC对象转化时,只涉及对象类型转化,不涉及所有权的转化。
讲一个OC对象转化成一个CF对象的时候,使用__bridge得到的CF对象不需要使用CFRelease释放,因为所有权还在OC这边,会通过ARC释放内存。
从形式上可以猜测,将OC对象转化成CF对象,其实是结构体指针,因为转化的结果都是CFXXXRef或者void*。
__bridge_transfer CF对象转化成OC对象的时候,将所有权交给ARC管理。此时也不需要调用CFRelease,因为__bridge_transfer会帮我们做这个事情。
__bridge_retained OC对象转化成CF对象的时候,将所有权交出,至此以后,这个对象的内存由开发者负责手动释放。
一个小技巧:在ARC的环境下获取对象的引用计数。 NSLog(@”Retain count is %ld”, CFGetRetainCount((__bridge CFTypeRef)myObject));