Objective-C对象和Core Foundation对象的

2017-12-20  本文已影响0人  南衍儿

Core Foundation对象主要使用在用C语言编写的Core Foundation框架中,并使用引用计数。
Core Foundation框架和Foundation框架紧密相关,它们为相同功能提供接口,但Foundation框架提供Objective-C接口。如果您将Foundation对象和Core Foundation类型掺杂使用,则可利用两个框架之间的 toll-free bridging。所谓的Toll-free bridging是说您可以在某个框架的方法或函数同时使用Core Foundatio和Foundation 框架中的某些类型。很多数据类型支持这一特性,其中包括群体和字符串数据类型。每个框架的类和类型描述都会对某个对象是否为toll-free bridged,应和什么对象桥接进行说明。

ARC仅管理Objective-C指针(retainreleaseautorelease),不管理CoreFoundation指针,Core Foundation框架中的retian/release分别是CFRetian/CFRelease,使用CFGetRetainCount来获取retainCount。注,Core Foundation中没有autorelease
例子:

CFMutableArrayRef cfObject = NULL;
    {
        id obj = [[NSMutableArray alloc]init];
        cfObject = (__bridge_retained CFMutableArrayRef) obj;
        CFShow(cfObject);
        printf("retain count = %d\n",CFGetRetainCount(cfObject));
    }
    printf("retain count after the scope = %d\n",CFGetRetainCount(cfObject));
    CFRelease(cfObject);

源代码正常运行后,输出一下结果,()代表空数组

(
)
retain count = 2
retain count after the scope = 1

Toll-free Bridging

CocoaFoundation指针与CoreFoundation指针转换,需要考虑的是所指向对象所有权的归属。ARC提供了3个修饰符来管理。

由于ARC不能管理Core Foundation Object的生命周期,所以在Core Foundation和ARC之间,我们需要使用到__bridge,__bridge_retained和__bridge_transfer三个转换关键字。

上一篇下一篇

猜你喜欢

热点阅读