美文网首页
Foundation与CoreFoundation的区别

Foundation与CoreFoundation的区别

作者: 如日之升101 | 来源:发表于2020-04-15 15:11 被阅读0次

    两者区别

    所在库 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;
    

    相关文章

      网友评论

          本文标题:Foundation与CoreFoundation的区别

          本文链接:https://www.haomeiwen.com/subject/jmecvhtx.html