美文网首页
1.内存管理

1.内存管理

作者: LucXion | 来源:发表于2021-08-18 09:55 被阅读0次

自己生成对象并 自己持有:alloc、new、copy、mutableCopy

自己生成对象但 不持有(需要持有需 retain、或者 autorelease->订阅到自动释放池):[NSArray array]

释放非自己持有的对象会造成崩溃

内存管理的基础方法:alloc、release、retain、dealloc

头部内存管理计数与计数表管理计数的区别

  • 头部内存管理
    • 少量代码即可完成
    • 能够统一管理引用计数的内存块与对象的内存块
  • 计数表管理
    • 对象用内存块无需考虑头部
    • 引用计数表各记录内存块地址,可追溯到各对象的内存块
    • 方便调试

autorelease

  • 生成并持有NSAutoreleasePool对象
  • 调用已分配对象的autorelease方法
  • 释放autoreleasePool

aotorelease的作用,就是将已分配的对象添加到自动释放池,在自动释放池作用域结束的时候,给自动释放池内的所有对象调用release方法

ARC所有权修饰符 __unsafe_unretained

    /*
     __unsafe_unretained
     是不安全的所有权修饰符
     与weak相同的地方在于他们都不会持有对象
     与weak不同的地方在于他不会自动将已释放的对象置为nil
     */
    id __unsafe_unretained obj1 = nil;
    
    {
        id __strong obj2 = [NSObject new];
        obj1 = obj2;
        NSLog(@"作用域内 %@",obj1);
    }
    // 此处为访问野指针崩溃
    NSLog(@"作用域外 %@",obj1);

所有权修饰符 __autorelesing

__autorelesing

CoreFoundation框架与Foundation框架通过免费桥转换

CFTypeRef CFBridgingRetain(id X){
    return (__bridge_retained CFTypeRef)X;
}

id CFBridgingRelease(CFTypeRef X){
    return (__bridge_transfer id)X;
}
// CF桥接到F
    CFMutableArrayRef cfArr = NULL;
    {
        NSMutableArray *ocArr = [[NSMutableArray alloc]init];
        cfArr = CFBridgingRetain(ocArr);
        CFShow(cfArr);
        printf("retain count = %d\n",CFGetRetainCount(cfArr));
    }
    printf("out scope retain count = %d\n",CFGetRetainCount(cfArr));
    CFRelease(cfArr);

// F桥接到CF
    CFMutableArrayRef cfArr = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL);
    printf("retain count = %d\n",CFGetRetainCount(cfArr));
    id ocArr = CFBridgingRelease(cfArr);
    printf("retain count = %d\n",CFGetRetainCount(cfArr));

属性

属性

相关文章

  • 1.内存管理

    自己生成对象并 自己持有:alloc、new、copy、mutableCopy 自己生成对象但 不持有(需要持有需...

  • 1. 内存管理:手动内存管理\\ARC

    1.1 手动内存管理对象在完成创建的同时,内部会自动创建一个引用计数器,这个计数器,是系统用来判断是否回收对象的唯...

  • 12.Objective-C之集合对象的内存管理

    1.前言 1.集合对象的内存管理 2.集合对象内存管理总结:

  • QY__

    1.堆和栈的区别 1.内存管理范围 只有oc对象需要进行内存管理 2.内存管理本质 因为:Obje...

  • 4-1 内存管理

    1.内存布局 2.iOS内存管理方案 [isa指针保存了内存管理的信息] 2.iOS内存管理方案 [isa指针...

  • 2021-10-27 内存管理--自动释放池(AutoRelea

    1.内存管理 内存布局 内存管理方案(更好的简述内存管理方案相关的问题,就要明白他们的数据结构) 数据结构 ARC...

  • Spark中Executor内存中管理机制

    分为两种1.静态内存管理2.统一内存管理一.静态内存管理 首先定义内存的大小为3G(--executor-memo...

  • iOS面试之内存管理大全

    内存管理内容如下: 内存布局 内存管理 数据结构 ARC/MRC 引用计数 弱引用 自动释放池 循环引用 1.内存...

  • iOS面试之内存管理模块

    内存管理内容如下: 内存布局 内存管理 数据结构 ARC/MRC 引用计数 弱引用 自动释放池 循环引用 1.内存...

  • 2020-03-19【内存管理】

    内存管理 内存布局 内存管理方案 数据结构 ARC & MRC 引用计数 弱引用 自动释放池 循环引用 1.内存布...

网友评论

      本文标题:1.内存管理

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