CoreFoundation当中的类型跟Foundation框架中的类型互相转换
//COREFOUNDATION框架
//创建的是一个CoreFoundation框架中的类型
//CoreFoundation当中的类型可以跟Foundation框架中的类型互相转换
// CFStringRef str = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, (CFStringRef)@"test %d", 5);
//
// NSString *s = (NSString *)str;
//
// NSLog(@"s is %@", s);
//
// CFRelease(str);
//在ARC中,需要对COREFOUNDATION框架中开辟的内存管理需要注意以下几点
/*
oc对象(ARC自动管理内存)---> CF类型(ARC不做管理)
__bridge_retained 这个桥接过程, ARC需要丢弃掉内存管理的权限
*/
NSString *s1 = [NSString stringWithFormat:@"jack"];
// CFStringRef s2 = (__bridge_retained CFStringRef) s1;
CFStringRef s2 = CFBridgingRetain(s1);
//...
CFRelease(s2);
/*
CF类型(ARC不做管理) ---> oc对象(ARC自动管理内存)
__bridge_transfer 这个桥接过程, 将CF类型的内存管理权限授权给OC的对象
*/
CFStringRef str = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, (CFStringRef)@"test %d", 5);
// NSString *str2 = (__bridge_transfer NSString *) str;
NSString *str2 = CFBridgingRelease(str);
NSLog(@"str2 is %@", str2);
//不需要释放,管理权限已经交给ARC
// CFRelease(str2);
/*
__bridge桥接, 不做弃权,也不能授权
*/
NSString *str3 = (__bridge NSString *)(str);
NSLog(@"str3 is %@", str3);