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

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

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容