core foundation框架 (corefoundation.framework) 是一組c語言介面,它們為ios應用程式提供基本資料管理和服務功能。core foundation框架和foundation框架緊密相關,它們為相同功能提供介面,但foundation框架提供objective-c介面。
如果您將foundation物件和core foundation型別摻雜使用,則可利用兩個框架之間的 「toll-free bridging」。所謂的toll-free bridging是說您可以在使用某個框架的方法或函式同時使用core foundation
和foundation
框架中的某些型別。
有時候,我們可能需要將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 部...