美文网首页OC&iOSiOS Developer
iOS中Foundation与Core Foundation的桥

iOS中Foundation与Core Foundation的桥

作者: HuyaRC | 来源:发表于2016-11-15 10:48 被阅读107次

    分享是每个优秀的程序员所必备的品质


    • 框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,以便使研发程序变得更容易
    • 在OSX下的Mac操作系统中大约有80个框架。
    Foundation框架

    Foundation框架是日常iOS开发中常用的,它是Cocoa框架(事实上是一个框架的集合)重要的组成部分,也是为所有程序开发奠定基础的框架。

    Foundation框架中大约有125个可用的头文件,允许使用一些基本对象(数字和字符串),以及一些对象结合(数组、字典和集合),其他功能包括处理日期和时间、内存管理、处理文件系统、存储(或归档)对象、线程和RunLoop以及处理几何数据结构等。

    Core Foundation框架

    Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能。

    Core Foundation框架和Foundation框架紧密相关,它们为相同功能提供接口,不同的是Foundation框架提供Objective-C接口。而Core Foundation框架提供Objective-C接口。有时候开发会将Foundation对象和Core Foundation类型掺杂使用,这就需要使用桥接。

    桥接
    • 桥接就是在Foundation框架中的对象Core Foundation框架中的变量之间进行类型转换
    • Core FoundationFoundation框架更加底层,是纯C语言的框架
    • Foundation框架在Core Foundation框架的基础上进行封装,增加了面向对象的思想

    以字符串为例:
    Foundation框架 :NSString *stringOC ;
    Core Foundation框架 :CFStringRef stringC ;(不加*)

    Snip1.png

    两个变量stringOCstringC,Foundation框架中有NSString类型,在Core Foundation框架中与之对应的是CFStringRef类型

    桥接的几种形式:

    1、 __bridge type
    __bridge只进行类型转换,不转让对象的所有权

    • stringC = (__bridge CFStringRef)stringOC;
      只是把stringOC所指向对象的地址交给了stringC,原来对象的所有权属于stringOC,转换之后还是属于stringOC,原来是由stringOC管理的内存,现在还是由stringOC管理,在ARC环境下,stringOC可以自动释放

    • stringOC = (__bridge NSString *)stringC;
      只是把stringC所指向变量的地址交给了stringOC,原来变量的所有权属于stringC,转换之后还是属于stringC,原来是由stringC管理的内存,现在还是由stringC管理,需要手动释放,调用CFRelease方法

    2、__bridge_retain CF type

    • strC = (__bridge_retain CFStringRef)strOC;
    • Foundation框架的对象转换成Core Foundation框架的变量
    • 同时转让对象的所有权,把对象的所有权从stringOC转移给stringC,原来是由stringOC管理的内存,现在让stringC来管理,需要手动释放,调用CFRelease方法
    • CFBridgingRetain方法和它等价

    3、__bridge_transfer Objective-C type

    • stringOC = (__bridge_transfer NSString*)stringC;
      • Core Foundation框架的变量转换成Foundation框架的对象
      • 同时转让变量的所有权,把变量的所有权从stingrC转移给stringOC,原来是由stringC管理的内存,现在让stringOC来管理,在ARC环境下,stringOC可以自动释放
    • CFBridgingRelease方法和它等价

    个人浅见,有误的地方欢迎指正

    相关文章

      网友评论

      • 人话博客:写的挺清楚的。
        我觉得最后可以这么总结一下。
        桥接的时候考虑两个问题:
        1.往哪个方向转。
        2.转的时候移不移交声明周期控制权。

      本文标题:iOS中Foundation与Core Foundation的桥

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