Toll-Free Bridging,简称TFB.可以实现某些objc类和对应的CoreFoundation类之间的互换使用
/*
桥接: CoreFoundation 中的类和 Foundation 中的类型可以互相转换
ARC 不能去管理 CoreFoundation 中的类型的引用计数
*/
桥接: CoreFoundation 中的类和 Foundation 中的类型可以互相转换
ARC 不能去管理 CoreFoundation 中的类型的引用计数
*/
//OC
对象(
ARC
管理内存)
----> CF
类型(
ARC
不做管理)
//__bridge_retained 这个桥接过程, ARC 需要丢弃掉内存管理的权限,由 CF 类型自己做内存管理
//__bridge_retained 这个桥接过程, ARC 需要丢弃掉内存管理的权限,由 CF 类型自己做内存管理
NSString *s1 =[ NSString stringWithFormat : @"jack" ];
// 第一种方法
CFStringRef s2 =( __bridge_retained CFStringRef )s1;
// 第二种方法
CFStringRef s3= CFBridgingRetain (s1);
//.......
CFRelease (s2);
CFRelease (s3);
//CF
类型(
ARC
不做管理)
----> OC
对象(
ARC
管理内存)
//__bridge_transfer 这个桥接过程 , 将 CF 类型的内存管理授权给 ARC 管理
CFStringRef cfstring = CFStringCreateWithFormat ( kCFAllocatorDefault , NULL , ( CFStringRef ) @"test" );
// 第一种方法
NSString *str =( __bridge_transfer NSString *)(cfstring);
// 第二种方法
// NSString *str =CFBridgingRelease(cfstring);
// 如果用第二行代码则不需要如下代码
CFRelease (cfstring);
//__bridge_transfer 这个桥接过程 , 将 CF 类型的内存管理授权给 ARC 管理
CFStringRef cfstring = CFStringCreateWithFormat ( kCFAllocatorDefault , NULL , ( CFStringRef ) @"test" );
// 第一种方法
NSString *str =( __bridge_transfer NSString *)(cfstring);
// 第二种方法
// NSString *str =CFBridgingRelease(cfstring);
// 如果用第二行代码则不需要如下代码
CFRelease (cfstring);