首先需要说明的是:ARC 环境下编译器不会自动管理 CF 对象的内存,所以当创建一个 CF 对象时,使用结束后要用 CFRelease 函数将其手动释放,CF 对象和 OC 对象相互转化的时候该如何管理内存,有如下三个关键字:
- __bridge:CF对象和 OC 对象转化时只涉及对象类型,不涉及对象和所有权的转化。其本身的意思是:ARC 仍然具备这个 OC 对象的所有权
NSURL * url = [[NSURL alloc] initWithString:@"www.baidu.com"];
CFURLRef ref = (__bridge CFURLRef)url;
__bridge_transfer:常用在 CF 对象装换成 OC 对象时,将 CF 对象的所有权交给 OC 对象,此时 ARC 就可以自动管理内存;作用和 CFBridgingRelease()相同
__bridge_retained:(与_bridge_transfer相反)常用在 OC 对象转换成 CF 对象,将 OC 对象的所有权交给 CF 对象来管理,作用同(CFBridgingRetain()),意味着 ARC 将交出对象的所有权。
NSURL * url = [NSURL URLWithString:@"www.baidu.com"];
CFURLRef ref = (__bridge_retained CFURLRef)url;
CFRelease(ref);
参考文章:http://www.cnblogs.com/zzltjnh/p/3885012.html
(爱笑的雷小豆)的博客