一共有三种桥接方法:
(在括号里敲__bridge方法才能有提示)
(__bridge <#type#>)<#expression#>)
(__bridge_retained <#CF type#>)<#expression#>)
(__bridge_transfer <#Objective-C type#>)<#expression#>)
main.m文件
int main(int argc, const char * argv[]) {
@autoreleasepool {
B *b = [[B alloc] init] ;
//1.__bridge桥接 , Foundation --> Core Foundation:
NSString *str0 = @"小苹果" ;
CFStringRef str1 = (__bridge CFStringRef)str0 ;
//2.__bridge桥接 , Core Foundation --> Foundation:
//明确告知我这个字符串到底是由谁来管理 , 当我用__bridge的时候我明确告知的是由创年者来管理 , 所以这里的str3没有占ARC的便宜,还是需要靠str2的生命周期来存活 , 这里我必须要调用str2的release方法 , 只不过在 Core Foundation 中不是realse 而是 CFRelease :
CFStringRef str2 = CFStringCreateWithCString(NULL, "小苹果", kCFStringEncodingUTF8) ;
NSString *str3 = (__bridge NSString *)(str2) ;
CFRelease(str2) ;
//3.如果我想占ARC的便宜直接让系统自动管理 , 我Core Foundation创建的对象我也不管理它了的话 , 我就不用用__bridge了~而应该使用 __bridge_transfer:
CFStringRef str2 = CFStringCreateWithCString(NULL, "小苹果", kCFStringEncodingUTF8) ;
NSString *str3 = (__bridge_transfer NSString *)(str2) ;
//就不用调用 CFRelease(str2) ;
//4.如果不想占ARC的便宜 , 就跨Core Foundation和Foundation使用的时候想全用Core Foundation来管理,需要我CFRelease的话那么用 __bridge_retained 桥接方法:
NSString *str4 = @"小苹果" ;
CFStringRef str5 = (__bridge_retained CFStringRef)str4 ;
//在foundation中创建了一个str4 , 想在core foundation中去管理 , 那么我还要调用CFRelease方法:
CFRelease(str5) ;
}
return 0;
}