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

2017-07-20  本文已影响0人  流氓兔刘

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

}

上一篇下一篇

猜你喜欢

热点阅读