美文网首页
ARC下OC 对象和 CF 对象之间的桥接(__bridge)

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

作者: 追风_少年 | 来源:发表于2017-02-07 16:44 被阅读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
(爱笑的雷小豆)的博客

相关文章

网友评论

      本文标题:ARC下OC 对象和 CF 对象之间的桥接(__bridge)

      本文链接:https://www.haomeiwen.com/subject/fqkmittx.html