cocoa-touch - core foundation与objective-c区别?
怪我咯
怪我咯 2017-04-21 11:16:12
0
1
538

core foundation与objective-c之间有什么关系和区别?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(1)
PHPzhong

Core Foundation框架 (CoreFoundation.framework) 是一組C語言接口,它們為iOS應用程式提供基本資料管理和服務功能。以下列舉該框架支援進行管理的資料以及可提供的服務:

群體資料型態 (數組、集合等)

程式包

字串管理

日期和時間管理

原始資料塊管理

偏好管理

URL及資料流操作

線程和RunLoop

埠和soket通訊

Core Foundation框架和Foundation框架緊密相關,它們為相同功能提供接口,但Foundation框架提供Objective-C接口。如果您將Foundation物件和Core Foundation類型摻雜使用,則可利用兩個框架之間的 “toll-free bridging”。所謂的Toll-free bridging是說您可以在某個框架的方法或函數同時使用Core Foundatio和Foundation 框架中的某些類型。很多資料類型支援這項特性,其中包括群體和字串資料類型。每個框架的類別和類型描述都會對某個物件是否為 toll-free bridged,應和什麼物件橋接進行說明。

Objective-C指標與CoreFoundation指標之間的轉換

ARC僅管理Objective-C指針(retain、release、autorelease),不管理CoreFoundation指針,CF指針由人工管理,手動的CFRetain和CFRelease來管理,註,CF中沒有autorelease。

CocoaFoundation指標與CoreFoundation指標轉換,需要考慮的是所指向物件所有權的歸屬。 ARC提供了3個修飾符來管理。

1. __bridge,什麼也不做,只是轉換。此種情況下:

i). 從Cocoa轉換到Core,需要人工CFRetain,否則,Cocoa指針釋放後, 傳出去的指針則無效。

ii). 從Core轉換到Cocoa,需要人工CFRelease,否則,Cocoa指針釋放後,對象引用計數仍為1,不會被銷毀。

2. __bridge_retained,轉換後自動呼叫CFRetain,即幫助自動解決上述i的情形。

3. __bridge_transfer,轉換後自動呼叫CFRelease,即幫助自動解決上述ii的情形。

由於ARC無法管理Core Foundation Object的生命週期,所以在Core Foundation和ARC之間,我們需要使用到__bridge,__bridge_retained和__bridge_transfer三個轉換關鍵字。

根據蘋果官方的文件(https://developer.apple.com/library/i...):

__bridge只做型別轉換,但不修改物件(記憶體)管理權;

__bridge_retained(也可以使用CFBridgingRetain)將Objective-C的物件轉換為Core Foundation的對象,同時將物件(記憶體)的管理權交給我們,後續需要使用CFRelease或相關方法來釋放物件;

__bridge_transfer(也可以使用CFBridgingRelease)將Core Foundation的物件轉換為Objective-C的對象,同時將物件(記憶體)的管理權交給ARC。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板