Bridge的用法

Bridge的用法_第1张图片
  • 在MRC模式下,CoreFundation与Fundation框架的对象之间可以直接相互转换
  • 在ARC模式下,CoreFundation还是手动内存管理,而Fundation框架中的对象由ARC帮我们管理
  • 所以在ARC模式下,CoreFundation与Fundation框架之间相互转换后,就存在一个问题,对象的生命周期到底由谁来管理
  • 以下代码都是在ARC模式下讨论

1 _ _bridge

    CFStringRef cfString = CFStringCreateWithCString(NULL, "string", kCFStringEncodingUTF8);
    NSString *string = (__bridge NSString *)cfString;
    //需要手动释放
    CFRelease(cfstring);
    NSString *string = @"string";
    CFStringRef cfString = (__bridge CFStringRef)string;
    //无需手动释放

2 _ _bridge_retained/CFBridgingRetain

    NSString *string = @"string";
    CFStringRef cfString = (__bridge_retained CFStringRef)string;
    //需要手动释放
    CFRelease(cfString);
    NSString *string = @"string";
    CFStringRef cfString = CFBridgingRetain(string);
    //需要手动释放
    CFRelease(cfString);

3 _ _bridge_transfer/CFBridgingRelease

    CFStringRef cfstring = CFStringCreateWithCString(NULL, "string", kCFStringEncodingUTF8);
    NSString *string = (__bridge_transfer NSString *)cfstring;
    //无需手动释放
     CFStringRef cfstring = CFStringCreateWithCString(NULL, "string", kCFStringEncodingUTF8);
    NSString *string = CFBridgingRelease(cfstring);
    //无需手动释放
  • ARC模式下,尽量将CF转交给OC对象来自动管理生命周期

你可能感兴趣的:(Bridge的用法)