美文网首页
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