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

  • 相关阅读:
    hdu 1017 A Mathematical Curiosity 解题报告
    hdu 2069 Coin Change 解题报告
    hut 1574 组合问题 解题报告
    hdu 2111 Saving HDU 解题报
    hut 1054 Jesse's Code 解题报告
    hdu1131 Count the Trees解题报告
    hdu 2159 FATE 解题报告
    hdu 1879 继续畅通工程 解题报告
    oracle的系统和对象权限
    oracle 自定义函数 返回一个表类型
  • 原文地址:https://www.cnblogs.com/naray/p/4871493.html
Copyright © 2011-2022 走看看