1.MRC环境下桥接
- (void)MRC{
//MRC下桥接
//Foundation到CoreFoundation框架的数据类型转换
NSString*str = [[NSStringalloc]init];
//CFStringRef ,这种转换,属于直接转换,不会移交对象的内存管理
CFStringRefstrRef = (CFStringRef)str;
NSLog(@"%@",strRef);
[strrelease];
//CoreFoundation到Foundation框架的数据类型转换
CFStringRefstrRef2 =CFStringCreateWithCString(CFAllocatorGetDefault(),"123",kCFStringEncodingUTF8);
//这种转换,属于直接转换,不会移交对象的内存管理
NSString*str2 = (NSString*)strRef2;
NSLog(@"%@",str2);
CFRelease(strRef2);
}
2.ARC环境下桥接
- (void)ARC{
//ARC下桥接
//Foundation到CoreFoundation框架的数据类型转换
NSString*str = [[NSStringalloc]init];
//(__bridge CFStringRef)等同于MRC下面的直接转换,不会移交对象的内存管理
//CFStringRef strRef = (__bridge CFStringRef)(str);
//CFBridgingRetain == __bridge_retained CFStringRef
//这种转换,会移交对象的内存管理
CFStringRefstrRef = (__bridge_retainedCFStringRef)(str);
NSLog(@"%@",strRef);
CFRelease(strRef);
//CoreFoundation到Foundation框架的数据类型转换
CFStringRefstrRef2 =CFStringCreateWithCString(CFAllocatorGetDefault(),"123",kCFStringEncodingUTF8);
//__bridge NSString *等同于MRC下面的直接转换,不会移交对象的内存管理
//NSString *str2 = (__bridge NSString *)strRef2;
//CFBridgingRelease == __bridge_transfer NSString *
//这种转换,会移交对象的内存管理
NSString*str2 = (__bridge_transferNSString*)strRef2;
NSLog(@"%@",str2);
// CFRelease(strRef2);
}
网友评论