专栏首页正则AutoreleasePool底层实现原理
原创

AutoreleasePool底层实现原理

创建和释放

  • App启动后,苹果在主线程 RunLoop 里注册了两个 Observer,其回调都是 _wrapRunLoopWithAutoreleasePoolHandler()。
  • 第一个 Observer 监视的事件是 Entry(即将进入Loop),其回调内会调用 _objc_autoreleasePoolPush() 创建自动释放池。其 order 是-2147483647,优先级最高,保证创建释放池发生在其他所有回调之前。
  • 第二个 Observer 监视了两个事件: BeforeWaiting(准备进入休眠) 时调用_objc_autoreleasePoolPop() 和 _objc_autoreleasePoolPush() 释放旧的池并创建新池;Exit(即将退出Loop) 时调用 _objc_autoreleasePoolPop() 来释放自动释放池。这个 Observer 的 order 是 2147483647,优先级最低,保证其释放池子发生在其他所有回调之后。
  • 在主线程执行的代码,通常是写在诸如事件回调、Timer回调内的。这些回调会被 RunLoop 创建好的 AutoreleasePool 环绕着,所以不会出现内存泄漏,开发者也不必显示创建 Pool 了。

也就是说AutoreleasePool创建是在一个RunLoop事件开始之前(push),AutoreleasePool释放是在一个RunLoop事件即将结束之前(pop)。

AutoreleasePool里的Autorelease对象的加入是在RunLoop事件中,AutoreleasePool里的Autorelease对象的释放是在AutoreleasePool释放时。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 浅谈 AutoreleasePool 的实现原理

    在 MRC 的环境下,可以通过调用 [obj autorelease] 将对象添加到当前的 autoreleasepool 中,来延迟释放内存;

    s_在路上
  • spirng底层实现原理

    用户2146856
  • spirng底层实现原理

    用户2146856
  • HashMap底层实现原理

    在JDK 1.8中,HashMap的底层数据结构是“数组+链表+红黑树”,即在链表的长度超过阈值8时转化为红黑树结构,这样大大减少了查找时间。

    赵哥窟
  • JMM和底层实现原理

    线程的通信是指线程之间以何种机制来交换信息。在编程中,线程之间的通信机制有两种,共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,线程...

    allsmallpig
  • HashTable原理和底层实现

    上次讨论了HashMap的结构,原理和实现,本文来对Map家族的另外一个常用集合HashTable进行介绍。HashTable和HashMap两种集合非常相似,...

    用户6182664
  • 面试-HashMap底层实现原理 原

    参考博客:https://www.cnblogs.com/wuhuangdi/p/4175991.html

    秋日芒草
  • String"+"拼接底层实现原理

    String:常量,不可变,不适合用来字符串拼接,每次都是新创建的对象,消耗较大。 StringBuffer:适合用来作字符串拼接 StringBuilder:...

    挨踢小子部落阁
  • React Hook 的底层实现原理

    https://medium.com/the-guild/under-the-hood-of-reacts-hooks-system-eb59638c9dba

    ConardLi
  • HashMap底层实现原理解析-JDK8

    HashMap在平时的工作中是使用最频繁的一种数据存储结构,例如在工作中我们可以用HashMap做本地缓存,存放临时对象等等场景中,而且HashMap也是平时面...

    Alec
  • JDK动态代理的底层实现原理

    JDK动态代理的底层实现原理      动态代理是许多框架底层实现的基础,比如Spirng的AOP等,其实弄清楚了动态代理的实现原理,它就没那么神奇了,下面就来...

    汤高
  • 内存管理总结-autoreleasePool

    用户1941540
  • OC底层探索09-cache_t实现原理探索OC底层探索09-cache_t实现原理探索

    在OC底层探索06-isa本身藏了多少信息你知道吗?分析了isa。 在OC底层探索08-基于objc4-781类结构分析中分析了bits;

    用户8893176
  • ArrayList之removeAll底层原理实现详解

    今天给大家介绍下ArrayList之removeAll的用法,并深入讲解一下它的底层实现原理。

    林老师带你学编程
  • 最新Vue底层原理实现概述

    Vue,React这样的框架可以说是现在前端的必备技能,一个刚入门两三个月的前端都是要会Vue的。

    童欧巴
  • Java集合,HashMap底层实现和原理

      首先在基于JDK1.7进行分析,对于JDK1.8所做的改动也会在文章中逐步进行说明。

    老九学堂-小师弟
  • Java集合,TreeMap底层实现和原理

    文章的内容基于JDK1.7进行分析,之所以选用这个版本,是因为1.8的有些类做了改动,增加了阅读的难度,虽然是1.7,但是对于1.8做了重大改动的内容,文章也会...

    用户6182664
  • servlet的底层实现原理是什么?

    1) 首先Sun公司编写了一系列Class,比如javax.servlet.http.HttpServlet,你编写的Servlet需要利用或继承它 们。这一系...

    马克java社区
  • socket-io的底层实现设计原理

    上一篇文章 《漫谈socket-io的基本原理》 用了现实非常浅显的例子,尽可能地阐释非阻塞、阻塞、多线程、多路复用poll和 epoll 背后演进的整体思考脉...

    亦山

扫码关注云+社区

领取腾讯云代金券