美文网首页
iOS AutoReleasePool底层实现- Autorel

iOS AutoReleasePool底层实现- Autorel

作者: XLsn0w | 来源:发表于2021-08-19 10:17 被阅读0次

    //***********push方法***********
    void *
    objc_autoreleasePoolPush(void)
    {
    return AutoreleasePoolPage::push();
    }

    //***********pop方法***********
    void
    objc_autoreleasePoolPop(void *ctxt)
    {
    AutoreleasePoolPage::pop(ctxt);
    }

    从定义中发现AutoreleasePoolPage继承自AutoreleasePoolPageData
    从AutoreleasePoolPageData的定义中发现了parent和child,
    这代表AutoreleasePoolPageData是一个双向链表,其内存大小为56字节

    AutoreleasePool原理
    自动释放池本质是一个AutoreleasePoolPage结构体对象,栈结构存储,每一个AutoreleasePoolPage以双向链表形式连接
    自动释放的压栈和出栈本质上是调用AutoreleasePoolPage的push和pop方法
    push 压栈
    判断hotPage是否存在
    不存在,autoreleaseNoPage创建新hotPage,调用add方法将对象添加至page栈中
    存在满了,autoreleaseFullPage初始新的page
    存在没满,调用add方法将对象添加到page的next指针,next指针++
    pop 出栈
    执行pop出栈时,会传入push操作的返回值,即POOL_BOUNDARY的内存地址token,根据token找到哨兵对象所在,并释放之前的对象,next指针--
    

    相关文章

      网友评论

          本文标题:iOS AutoReleasePool底层实现- Autorel

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