OC高效率52之"无缝桥接"

本文介绍了Objective-C中实现与Core Foundation框架内的C数据结构之间的无缝桥接方法,包括使用__bridge进行类型转换以及通过回调函数管理CF类型的引用计数。
#import "ViewController.h"
#import <Foundation/Foundation.h>
#import <CoreFoundation/CoreFoundation.h>
@interface ViewController ()

@end

@implementation ViewController

const void* EOCRetainCallback (CFAllocatorRef allocator , const void *value){

    return CFRetain(value);
}

void EOCReleaseCallback(CFAllocatorRef allocator , const void *value){
    CFRelease(value);
}

CFDictionaryKeyCallBacks keyCallbacks = {
    0,
    EOCRetainCallback,
    EOCReleaseCallback,
    NULL,
    CFEqual,
    CFHash
};

CFDictionaryValueCallBacks valueCallbacks = {
    0,
    EOCRetainCallback,
    EOCReleaseCallback,
    NULL,
    CFEqual,
};

- (void)viewDidLoad {
    [super viewDidLoad];
 //无缝桥接::Foundation框架中的OC类和定义于CoreFoundation框架中的C数据结构之间互相转换
    
    NSArray *array = @[@1,@2,@3,@4,@5];
    CFArrayRef aCFArray = (__bridge CFArrayRef)array;//__bridge的意思是ARC仍然具备OC对象的所有,__bridge_retained则相反
    NSLog(@"%li",CFArrayGetCount(aCFArray));//5
    
    CFMutableDictionaryRef aCFDictionary = CFDictionaryCreateMutable(NULL, 0, &keyCallbacks, &valueCallbacks);
    NSMutableDictionary *anNSdictionary = (__bridge_transfer NSMutableDictionary *)aCFDictionary;//C转换为OC
    
}


@end


转载于:https://my.oschina.net/u/2319073/blog/652181

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值