[Objective-C]__bridge,__bridge_retained和__bridge_transfer的意思,区别与使用

Objective-C(27) html

使用ARC能帮咱们减轻很多内存管理方面的负担,尤为是对用惯了Java的程序员来讲。可是像我这种Java基础自己就不牢固,作了两年的iOS已经习惯手动管理内存的半吊子,使用ARC仍是常常碰壁。

最近碰到了CFObject和NSObject转换的问题,因为ARC不能管理Core Foundation Object的生命周期,因此在Core Foundation和ARC之间,咱们须要使用到__bridge,__bridge_retained和__bridge_transfer三个转换关键字。

根据苹果官方的文档(https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html):

__bridge只作类型转换,可是不修改对象(内存)管理权;

__bridge_retained(也能够使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给咱们,后续须要使用CFRelease或者相关方法来释放对象;
 ios

__bridge_transfer(也能够使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。程序员

相关文章
相关标签/搜索