OC高效率52之"無縫橋接"

#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
相關文章
相關標籤/搜索