ARC下OC物件和CF物件之間的架橋

2021-07-06 10:22:29 字數 1481 閱讀 1453

core foundation框架 (corefoundation.framework) 是一組c語言介面,它們為ios應用程式提供基本資料管理和服務功能。core foundation框架和foundation框架緊密相關,它們為相同功能提供介面,但foundation框架提供objective-c介面。

如果您將foundation物件和core foundation型別摻雜使用,則可利用兩個框架之間的 「toll-free bridging」。所謂的toll-free bridging是說您可以在使用某個框架的方法或函式同時使用core foundationfoundation框架中的某些型別。

有時候,我們可能需要將cf物件和oc物件進行互相轉化,我們知道,arc環境下編譯器不會自動管理cf物件的記憶體,所以當我們建立了乙個cf物件以後就需要我們使用cfrelease將其手動釋放,那麼cf和oc相互轉化的時候該如何管理記憶體呢?答案就是我們在需要時可以使用__bridge,__bridge_transfer,__bridge_retained

一.__bridge:cf和oc物件轉化時只涉及物件型別不涉及物件所有權的轉化

nsurl *url = [[nsurl alloc] initwithstring:@""];

cfurlref ref = (__bridge cfurlref)url;

二.__bridge_transfer:常用在將cf物件轉換成oc物件時,將cf物件的所有權交給oc物件,此時arc就能自動管理該記憶體;(作用同cfbridgingrelease()

cfstringref cfstring= cfurlcreatestringbyaddingpercentescapes(

null,

(__bridge cfstringref)text,

null,

cfstr("!*』();:@&=+$,/?%#"), cfstringconvertnsstringencodingtoencoding(nsutf8stringencoding));

nsstring *ocstring = (__bridge_transfer cfstringref)cfstring;

三.__bridge_retained:(與__bridge_transfer相反)常用在將oc物件轉換成cf物件時,將oc物件的所有權交給cf物件來管理;(作用同cfbridgingretain())

nsurl *url = [[nsurl alloc] initwithstring:@""];

cfurlref ref = (__bridge_retained cfurlref)url;

cfrelease(ref);

ARC下OC物件與CF物件橋接

bridge 不涉及物件所有關係改變 bridge transfer 給予 arc 所有權 bridge retained 解除 arc 所有權 在arc中,oc物件與非oc物件在強制轉換中,需要使用以上三個關鍵字進行橋接,那麼三個關鍵字各用在什麼情況下呢?詳解如下 下面一行 cfstringref...

OC基礎 物件和物件之間的關係09

1 個物件是由多個物件組合起來的.比如.計算機物件 是由主機板物件 cpu物件 記憶體物件 硬碟物件 組合起來的.主機板 記憶體 硬碟作為計算機物件的屬性.那麼這個時候 計算機物件和主機板 記憶體 硬碟的關係為 組合關係.1個物件的方法的引數是另外 1個物件 那麼我們就說他們的關係是依賴關係.比如,...

OC 物件導向,類和物件

面向過程,c語言是一門面向過程語言,關注的是如何解決問題,需要哪些步驟 物件導向,oc是一門物件導向語言,關注的是解決問題需要哪些物件。可以對類進性操作也可以對物件進行操作,即方法,同乙個方法可以應用於不同多個物件。classorinstance method 對類和例項應用方法 inte ce 部...