OC对象使用了ARC,自己主动释放内存,可是CF中的对象没有ARC,必需要手动进行引用计数和内存释放.
两者对象之间的互相转换有三种形式:
1.__bridge:
直接转换,部改变对象的持有状况:
id obj = [NSObject new]; cfObject = (_bridge cfObject) obj; //不改变对象持有状况,cf对象不能获得obj的引用. id obc = (__bridge id)cfObject; //但obc是强引用,是被__strong修饰的,必然获得cf对象的强引用.
2.CFBridgingRetain 和 __bridge_retained:
转换得到的CF对象获得一个强引用,引用计数加1,须要人工的使用CFRelease来释放CF对象:
cfobject = CFBridgingRetain(obj); //cfoject具有强引用,必须使用手工释放 CFRelease(cfobject);
将cf对象赋值给id时,释放CF对象本身的引用:
id obj = (__bridge_transfer id)cfObject; //id拥有一个强引用,但cfObject本身的引用已经被释放了.