Bridge的用法

  • 在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对象来自动管理生命周期
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容