• iOS开发系列-Foundation与CoreFoundation内存管理


    概述

    对于初学者来说,可能仅只能将ARC用在objective-c对象上(也即继承自NSObject的对象),但是如果涉及到较为底层的东西,比如Core Foundation中的malloc()或者free()等,ARC就鞭长莫及了,这时候还是需要自己手动进行内存管理。

    ARC下Foundation与CoreFoundation内存管理

    - (void)ARCChange{
    
        // Foundation --> CoreFoundation框架数据类型的转换
        NSString *str = [[NSString alloc] init];
        // (__bridge CFStringRef) 等同于MRC下的直接转换,不会移交对象的内存管理
        //     CFStringRef strRef = (__bridge CFStringRef)str;
        
        // 这种方式转换,会移交对象的内存管理权
        CFStringRef strRef = (__bridge_retained CFStringRef)(str);
        NSLog(@"%@", strRef);
        CFRelease(strRef);
        
        
        // CoreFoundation ----> Foundation框架的数据类型转换
        CFStringRef strRef2 = CFStringCreateWithCString(CFAllocatorGetDefault(), "123", kCFStringEncodingUTF8);
        // (__bridge CFStringRef) 等同于MRC下的直接转换,不会移交对象的内存管理
        //    NSString *str2 = (__bridge NSString *)strRef2;
        //    NSLog(@"%@", str2);
        //    CFRelease(strRef2);
        
        // 这种方式转换,会移交对象的内存管理权
        // CFBridgingRelease == __bridge_transfer NSString *
        //    NSString *str2 = (__bridge_transfer NSString *)strRef2;
        NSString *str2 = CFBridgingRelease(strRef2);
        NSLog(@"%@", str2);
    }
    

    MRC下Foundation与CoreFoundation内存管理

    - (void)MRCChange{
        // Foundation ---> CoreFoundation
        
        NSString *str = [[NSString alloc] init];
        // CFStringRef 这种转换 属于直接转换 不会移交对象的内存管理
        CFStringRef strRef = (CFStringRef)str;
        
        NSLog(@"%@", strRef);
        [str release];
        
        // CoreFoundation 到 Foundation框架的数据类型转换
        CFStringRef strRef2 = CFStringCreateWithCString(CFAllocatorGetDefault(), "123", kCFStringEncodingUTF8);
        // 这种转换,属于直接转换 不会移交对象的内存管理
        NSString *str2 = (NSString *)strRef2;
        
        NSLog(@"%@", str2);
        CFRelease(strRef2);
    }
    
  • 相关阅读:
    【题解】Red-Blue Graph Codeforces 1288F 上下界费用流
    【题解】The Magician HDU 6565 大模拟
    HAOI2018游记
    【题解】【THUSC 2016】成绩单 LOJ 2292 区间dp
    【题解】【雅礼集训 2017 Day5】远行 LOJ 6038 LCT
    【题解】Catering World Finals 2015 上下界费用流
    《无问西东...》
    为了世界的和平~一起上caioj~~~!
    新征程~起航!
    bzoj4240: 有趣的家庭菜园(树状数组+贪心思想)
  • 原文地址:https://www.cnblogs.com/CoderHong/p/9113026.html
Copyright © 2020-2023  润新知