Foundation与CoreFoundation的区别

2020-04-15  本文已影响0人  如日之升101

两者区别

所在库 Foundation CoreFoundation
对象归属 OC对象 C对象
实现语言 Objecitve-c c语言
ARC内存管理 ARC自动管理 手动管理
MRC内存管理 手动管理 手动管理

互相转换

MRC下:两者可以直接转换,均为手动内存管理
ARC下:可通过_bridge, _bridge_transfer, _bridage_retained关键字转换,区别如下:

关键字 _bridge _bridge_transfer _bridge_retained
用途 双向转换 CF - F F - CF
内存交接 维持现状 转换后由ARC自动管理 转换后手动管理
核心含义 不移交内存控制权 赋予ARC管理权 剥脱ARC管理权

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

实战举例

以字符串为例:
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;
上一篇下一篇

猜你喜欢

热点阅读