Foundation與CoreFoundation的區(qū)別

兩者區(qū)別

所在庫 Foundation CoreFoundation
對象歸屬 OC對象 C對象
實現(xiàn)語言 Objecitve-c c語言
ARC內(nèi)存管理 ARC自動管理 手動管理
MRC內(nèi)存管理 手動管理 手動管理

互相轉(zhuǎn)換

MRC下:兩者可以直接轉(zhuǎn)換,均為手動內(nèi)存管理
ARC下:可通過_bridge, _bridge_transfer, _bridage_retained關(guān)鍵字轉(zhuǎn)換,區(qū)別如下:

關(guān)鍵字 _bridge _bridge_transfer _bridge_retained
用途 雙向轉(zhuǎn)換 CF - F F - CF
內(nèi)存交接 維持現(xiàn)狀 轉(zhuǎn)換后由ARC自動管理 轉(zhuǎn)換后手動管理
核心含義 不移交內(nèi)存控制權(quán) 賦予ARC管理權(quán) 剝脫ARC管理權(quán)

(CF代指Core Foundation對象, F代指Foundation對象)

實戰(zhàn)舉例

以字符串為例:
NSString對象 (Foundation對象)
CFStringRef (Core Foundation對象)

NSString 轉(zhuǎn) CFStringRef
   1、 // _bridge方式 , 轉(zhuǎn)換后CFString仍由ARC自動管理內(nèi)存
    NSString *fString = @"foundation";
    CFStringRef CFString = (__bridge CFStringRef)fString);

   2、// _bridge_retained方式,轉(zhuǎn)換后CFString需手動管理內(nèi)存
    NSString *fString = @"foundation";
    CFStringRef CFString = (__bridge_retained CFStringRef)fString);
CFStringRef 轉(zhuǎn) NSString
     1、// _bridge方式 , 轉(zhuǎn)換后fString仍需手動管理內(nèi)存
     CFStringRef CFString = CFStringCreateWithCString(NULL, "CF",kCFStringEncodingASCII);
     NSString *fString = (__bridge NSString *)CFString;

     2、// _bridge_transfer方式,轉(zhuǎn)換后fString由ARC自動管理內(nèi)存
     CFStringRef CFString = CFStringCreateWithCString(NULL, "CF", kCFStringEncodingASCII);
     NSString *fString = (__bridge_transfer NSString *)CFString;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容