Foundation與CoreFoundation的區(qū)別

兩者區(qū)別

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

互相轉換

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

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

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

實戰(zhàn)舉例

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

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

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

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容