ARC下OC 對象和 CF 對象之間的橋接(__bridge)

首先需要說明的是:ARC 環境下編譯器不會自動管理 CF 對象的內存,所以當創建一個 CF 對象時,使用結束后要用 CFRelease 函數將其手動釋放,CF 對象和 OC 對象相互轉化的時候該如何管理內存,有如下三個關鍵字:

  1. __bridge:CF對象和 OC 對象轉化時只涉及對象類型,不涉及對象和所有權的轉化。其本身的意思是:ARC 仍然具備這個 OC 對象的所有權
NSURL * url = [[NSURL alloc] initWithString:@"www.baidu.com"];
CFURLRef ref = (__bridge CFURLRef)url;
  1. __bridge_transfer:常用在 CF 對象裝換成 OC 對象時,將 CF 對象的所有權交給 OC 對象,此時 ARC 就可以自動管理內存;作用和 CFBridgingRelease()相同

  2. __bridge_retained:(與_bridge_transfer相反)常用在 OC 對象轉換成 CF 對象,將 OC 對象的所有權交給 CF 對象來管理,作用同(CFBridgingRetain()),意味著 ARC 將交出對象的所有權。

 NSURL * url = [NSURL URLWithString:@"www.baidu.com"];
 CFURLRef ref = (__bridge_retained CFURLRef)url;
 CFRelease(ref);

參考文章:http://www.cnblogs.com/zzltjnh/p/3885012.html
(愛笑的雷小豆)的博客

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容