#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
本文介绍了Objective-C中实现与Core Foundation框架内的C数据结构之间的无缝桥接方法,包括使用__bridge进行类型转换以及通过回调函数管理CF类型的引用计数。

313

被折叠的 条评论
为什么被折叠?



