美文网首页
4-7 自动释放池

4-7 自动释放池

作者: Rumbles | 来源:发表于2019-04-08 07:56 被阅读0次

    1.AutoreleasePool的实现原理是什么

    本质会调用两个方法
    objc_autoreasePoolPush
    
    void*AutoreasePoolPage::push
    
    objc_autoreasePoolPop
    
    自动释放池的数据结构:
    栈为节点通过双向链表的方式组合而成的
    是和线程一一对应的
    
    push就是插入双向链表当中
    
    pop 就是从最后进来的对象一个一个发送realease方法 释放掉
    
    面试题:arr是如何释放的?
    - (void)viewDidLoad {
        [super viewDidLoad];
        NSMutableArray *arr = [NSMutableArray new]; 
    }
    
    当当次 runloop将要结束的时候调用 pop方法释放掉
    

    2.双向链表·

    NULL <--Node.    --> NULL
    栈事向下增长的。低地址到高地址
    栈是吃了吐
    

    3. AutoreleasePool为何可以嵌套使用

    创建多个page
    哨兵对象
    

    4.使用场景

    当一个对象 对内存消耗特别大的时候。 插入 AutoreleasePool 释放掉
    

    5.实现原理

    AutoreleasePool。就是以栈为节点通过双向链表的方式组合而成的数据结构
    autorelease方法会把对象存储到AutoreleasePoolPage的链表里。等到auto release pool被释放的时候,把链表内存储的对象删除。所以,AutoreleasePoolPage就是自动释放池的内部实现
    

    相关文章

      网友评论

          本文标题:4-7 自动释放池

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