一共有三種橋接方法:
(在括號(hào)里敲__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:
//明確告知我這個(gè)字符串到底是由誰來管理 , 當(dāng)我用__bridge的時(shí)候我明確告知的是由創(chuàng)年者來管理 , 所以這里的str3沒有占ARC的便宜,還是需要靠str2的生命周期來存活 , 這里我必須要調(diào)用str2的release方法 , 只不過在 Core Foundation 中不是realse 而是 CFRelease :
CFStringRef str2 = CFStringCreateWithCString(NULL, "小蘋果", kCFStringEncodingUTF8) ;
NSString *str3 = (__bridge NSString *)(str2) ;
CFRelease(str2) ;
//3.如果我想占ARC的便宜直接讓系統(tǒng)自動(dòng)管理 , 我Core Foundation創(chuàng)建的對(duì)象我也不管理它了的話 , 我就不用用__bridge了~而應(yīng)該使用 __bridge_transfer:
CFStringRef str2 = CFStringCreateWithCString(NULL, "小蘋果", kCFStringEncodingUTF8) ;
NSString *str3 = (__bridge_transfer NSString *)(str2) ;
//就不用調(diào)用 CFRelease(str2) ;
//4.如果不想占ARC的便宜 , 就跨Core Foundation和Foundation使用的時(shí)候想全用Core Foundation來管理,需要我CFRelease的話那么用 __bridge_retained 橋接方法:
NSString *str4 = @"小蘋果" ;
CFStringRef str5 = (__bridge_retained CFStringRef)str4 ;
//在foundation中創(chuàng)建了一個(gè)str4 , 想在core foundation中去管理 , 那么我還要調(diào)用CFRelease方法:
CFRelease(str5) ;
}
return 0;
}