Bridge的用法

作者: 小布衫 | 来源:发表于2016-12-14 14:51 被阅读0次
    • 在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的用法

        本文链接:https://www.haomeiwen.com/subject/bzpimttx.html