ARC下OC 对象和 CF 对象之间的桥接(__bridge)

2017-02-07  本文已影响0人  追风_少年

首先需要说明的是:ARC 环境下编译器不会自动管理 CF 对象的内存,所以当创建一个 CF 对象时,使用结束后要用 CFRelease 函数将其手动释放,CF 对象和 OC 对象相互转化的时候该如何管理内存,有如下三个关键字:

  1. __bridge:CF对象和 OC 对象转化时只涉及对象类型,不涉及对象和所有权的转化。其本身的意思是:ARC 仍然具备这个 OC 对象的所有权
NSURL * url = [[NSURL alloc] initWithString:@"www.baidu.com"];
CFURLRef ref = (__bridge CFURLRef)url;
  1. __bridge_transfer:常用在 CF 对象装换成 OC 对象时,将 CF 对象的所有权交给 OC 对象,此时 ARC 就可以自动管理内存;作用和 CFBridgingRelease()相同

  2. __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
(爱笑的雷小豆)的博客

上一篇 下一篇

猜你喜欢

热点阅读