zoukankan      html  css  js  c++  java
  • 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);
    }
    
  • 相关阅读:
    Spring Tool Suite 配置和使用
    自动提示在线/离线状态
    Excel数据导入数据库的SQL快速生成
    MySQL查询和删除重复数据
    内存不足时,调用ajax报的错
    订单支付成功后存储过程
    下订单存储过程
    课程表,订单表(统计报名人数),评论表(统计评论的人数),点赞表(点赞人数)
    更改浏览器的滚动条样式
    自定义文本选中样式
  • 原文地址:https://www.cnblogs.com/CoderHong/p/9113026.html
Copyright © 2011-2022 走看看