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);
    }
    
  • 相关阅读:
    排序总结[3]_线性排序算法
    Spring九问
    DP-最大递增子序列与最大递增子数组; 最大公共子序列与最大公共子数组。
    java 8 新特性
    数据库事务隔离等级
    算法思维方式之二——DP与DFS
    算法思维方式—— 由排列组合想到的
    java Servlet简介
    java hashCode, 引用以及equals().
    java反射简介
  • 原文地址:https://www.cnblogs.com/CoderHong/p/9113026.html
Copyright © 2011-2022 走看看