Bridge的用法
2016-12-14 本文已影响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对象来自动管理生命周期