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

  • 相关阅读:
    webapi Action中跳转到指定内容
    命令行添加防火墙入站规则
    nps简单配置(linux环境)
    C# 执行Javascript脚本
    Docker集群管理(Docker Swarm)
    linux简单的部署frp
    QMap只有insert,而没有append
    SqlServer 数据发布与订阅时一个小问题的处理
    Vue 内部指令缩写
    html中ol li和ul li的区别
  • 原文地址:https://www.cnblogs.com/naray/p/4871493.html
Copyright © 2011-2022 走看看