静态内存分析-场景演练-桥接

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);

}


静态内存分析-场景演练-桥接_第1张图片

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);

}

静态内存分析-场景演练-桥接_第2张图片

你可能感兴趣的:(静态内存分析-场景演练-桥接)