zoukankan      html  css  js  c++  java
  • ARC模式下OC对象和CF对象之间的桥接(Bridge)

    一、概述

    在IOS APP开发过程中,会使用到Core Foundation库,简称CF。如:Core Graphics,Core Text。在ARC模式下,编译器不会自动管理CF对象内存,这样,就需要我们自己管理了,当我们创建一个CF对象后,就需要使用CFRelease(CFOject)手动释放内存。如何,将OC对象和CF对象进行相互转化,要使用__bridge、__bridge_transfer、__bridge_retained。

    二、使用方法

    1. __bridge:在CF对象与OC对象相互转化时,此修饰只是对类型转化,不涉及对象的所有权转化。

    例子:

    1 NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
    2 CFURLRef ref = (__bridge CFURLRef)url;

    上面这段代码,创建的是一个OC对象,在OC转化为CF对象时,仅涉及到了类型转化,并未涉及对象的所有权转化,所以,内存管理依然是OC下的管理方式。

    2. __bridger_transfer:将一个CF对象转化为一个OC对象时,将CF对象的所有权交给OC对象,此时ARC就能自动管理该内存;(作用同CFBridgingRelease())。

    3. __bridger_retained:(与__bridge_transfer相反)将一个OC对象转化为一个CF对象时,将OC对象的所有权交给CF对象管理;(作用等同于CFBridgingRetain())。

    例子:

    1 NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
    2 CFURLRef ref = (__bridge_retained CFURLRef)url;
    3 CFRelease(ref);

    PS:查阅资料:http://www.cnblogs.com/zzltjnh/p/3885012.html

  • 相关阅读:
    用自己电脑搭建外网可访问的服务器(转)
    vue页面开发,简单技术点总结
    学习网站
    bzoj4530&&#3805. 大融合
    bzoj4137&&dtoj#2259. 火星商店问题
    bzoj-4009&&dtoj#2284. 接水果(fruit)
    bzoj5407: girls
    bzoj3498: PA2009 Cakes
    CF938F Erasing Substrings
    dtoj#4138. 染色(ranse)
  • 原文地址:https://www.cnblogs.com/naray/p/4871493.html
Copyright © 2011-2022 走看看