[Objective-C]__bridge,__bridge_retained和__bridge_t

使用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或者相關方法來釋放對象;

html

__bridge_transfer(也能夠使用CFBridgingRelease)將Core Foundation的對象轉換爲Objective-C的對象,同時將對象(內存)的管理權交給ARC。ios

相關文章
相關標籤/搜索