美文网首页
AutoreleasePool 的相关问题

AutoreleasePool 的相关问题

作者: 荷码人生 | 来源:发表于2020-04-25 21:11 被阅读0次

(1)Autoreleasepool的实现原理:

  • 以栈为结点,由双向链表的形式合成的数据结构。
  • 与线程一一对应。
双向链表

(2)@autoReleasePool经过编译器变异后,成为:

void * ctx = objc_autoReleasePoolPush(); //ctx 就是哨兵对象所对应的位置。
{}对应代码;
objc_autoReleasePoolPop(ctx);

  • objc_autoReleasePoolPush(); 的内部实现:调用了c++中的一个结构体:autoReleasePoolPage::push(void);

  • objc_autoReleasePoolPop(); 内部实现:调用了c++中的AutoReleasePoolPage::pop(void * ctx)函数。

一次pop 相当于一次批量的pop 操作:pop的时候,就会将{}中变量全部释放一次

(3) autoReleasePoolPage 的数据结构:

  • next 指向下一个栈中的可填充位置。
  • parent 父指针
  • child 孩子指针
  • pthread_t 线程。
AutoReleasePoolPage 的数据结构图

(4)autoReleasePoolPage::push的实现:

根据next指针找到栈中可以进行填充的位置,然后在该位置置为nil ,也就是插入了一个哨兵对象。

push操作:会把当前的next 指向的位置置为nil,也就是哨兵对象。然后将next指针指向下一个可入栈的位置。

(5)[objc autorelease]方法的具体实现??

首先会判断,当前next指针是否指向了栈顶。如果说不是栈顶,那就将对象添加到next位置上,结束调用流程。如果说是栈顶,那么就会增加一个栈结点,到链表中,然后在新的栈中添加对象。

(6)autoReleasePoolPage::pop的实现:

  • 根据哨兵对象,找到对应位置。
  • 给上次push 操作之后添加的对象一次发送release消息。
  • 回退next 指针对象到指定位置。

总结

1、在当次runloop将要结束时,调用autoreleasePoolPage::pop()方法。
2、多层嵌套调用就是多次插入哨兵对象。

相关文章

  • AutoreleasePool 的相关问题

    (1)Autoreleasepool的实现原理: 以栈为结点,由双向链表的形式合成的数据结构。 与线程一一对应。 ...

  • Autoreleasepool自动释放池-源码

    Autoreleasepool相关的内容是在面试中比较容易被问到的。之前呢,谈到Autoreleasepool只能...

  • autoreleasePool相关实现

    1.AutoreleasePool并没有单独的结构,而是由若干个AutoreleasePoolPage以双向链表的...

  • 简单理解AutoreleasePool

    面试官比较喜欢问AutoreleasePool相关的题一般问法有两种:1.AutoreleasePool管理的对象...

  • AutoreleasePool是什么时候销毁的?

    这个问题肯定要对AutoreleasePool和RunLoop有所了解才行。 AutoreleasePool是在什...

  • 浅谈AutoreleasePool底层是如何实现的?

    前一段时间总被问起AutoreleasePool相关问题, 今天呢自己总结一下, 把之前调研的关于Autorele...

  • 2019-12-23

    AutoreleasePool是什么时候销毁的?这个问题能回答上来的话,肯定要对AutoreleasePool和R...

  • runtime

    autoreleasePool autoreleasePool认识 autoreleasePool怎么加进去的,什...

  • 面试总结

    iOS面试题相关 原理部分runloop mode、常见用法内存管理 autoreleasepool如何释放,怎么...

  • AutoReleasePool

    AutoReleasePool 此处讨论的自动释放池不是我们以前手动创建的那种.是系统处理内存相关的. 自动释放池...

网友评论

      本文标题:AutoreleasePool 的相关问题

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