• 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

  • 相关阅读:
    UITableView全面解析
    UITableView传值(自己使用)(属性,代理传值)
    页面之间传值(单例传值)(自己使用)
    带导航栏的最简单多视图
    UIscrollView和UIPageControl的循环滚动
    UIPickerView简单应用
    自定义进度条(菜鸟版)
    UISegmentedControl(人物简介)
    UI控件闪灯
    关于NSCELL
  • 原文地址:https://www.cnblogs.com/naray/p/4871493.html
Copyright © 2020-2023  润新知