一、自动释放池 autoreleasepool 原理

  • 自动释放池是 OC 中的一种内存自动回收机制,它可以将加入 autoreleasePool 中的变量 release 的时机延迟。
  • 简单来说,就是当创建一个对象,在正常情况下,变量会在超出其作用域的时立即release。
  • 如果将对象加入到了自动释放池中,这个对象并不会立即释放,会等到 runloop 休眠,超出 autoreleasepool 作用域{}之后才会被释放。
  • 自动释放池 autoreleasepool 其机制如下图所示:

  • autoreleasepool 机制流程:
    • 从程序启动到加载完成,主线程对应的 runloop 会处于休眠状态,等待用户交互来唤醒 runloop;
    • 用户的每一次交互都会启动一次 runloop,用于处理用户的所有点击、触摸事件等;
    • runloop 在监听到交互事件后,就会创建自动释放池,并将所有延迟释放的对象添加到自动释放池中;
    • 在一次完整的 runloop

iOS之深入解析自动释放池autoreleasepool的底层原理相关推荐

  1. iOS之深入解析objc_msgSend消息转发机制的底层原理

    一.抛砖引玉 objc_msgSend() 消息发送的过程就是 通过 SEL 查找 IMP 的过程 . objc_msgSend() 是用 汇编语言 实现的,使用汇编实现的优势是: 消息发送的过程需要 ...

  2. [Objective-C] 自动释放池(Autoreleasepool)--拆迁队的外援

    C#妹妹:内存的清理跟生活中的拆迁一样是个麻烦事情啊 Objective-C阿姨:是啊,该拆的不拆,占用空间,不该拆的拆了,程序崩溃 C#妹妹:说白了,难度不在拆上,在判定上,判断到底那些内存是用不上 ...

  3. 自动释放池autoreleasepool

    自动释放池是NSAutoreleasePool的实例,其中包含了收到autorelease消息的对象.当一个自动释放池自身被销毁(dealloc)时,它会给池中每一个对象发送一个release消息(如 ...

  4. iOS之深入解析dyld与ObjC关联的底层原理

    App启动与dylb加载 我们知道 dyld 的加载过程,即在 App 启动启动执行 main 函数之前,dylb 主要作了环境变量配置.共享缓存.主程序的初始化.插入动态库.链接主程序.链接动态库. ...

  5. iOS之深入解析内存管理Tagged Pointer的底层原理

    一.前言 ① Tagged Pointer 概念 iOS 开发者对"引用计数"这个名词肯定不陌生,引用计数是苹果为了方便开发者管理内存而引入的一个概念.当引用计数为 0 时,对象就 ...

  6. iOS之深入解析类方法+load与+initialize的底层原理

    一.前言 Objective-C 作为一门面向对象语言,有类和对象的概念.编译后,类相关的数据结构会保留在目标文件中,在运行时得到解析和使用.在应用程序运行起来的时候,类的信息会有加载和初始化过程. ...

  7. iOS之深入解析Runtime的objc_msgSend“快速查找”底层原理

    Runtime 一.什么是 runtime ? Objective-C 语言将尽可能多的决策从 编译时和链接时 推迟到运行时.只要有可能,它就 动态 地做事情,这意味着该语言不仅需要一个编译器,还需要 ...

  8. 内存管理-定时器循环、内存布局、tagged pointer、weak指针、copy、自动释放池

    先上代码,我们平时用的定时器,cadisplaylink.nstimer,CADisplayLink.NSTimer会对target产生强引用,如果target又对它们产生强引用,那么就会引发循环引用 ...

  9. 12.06-自动释放池(autoreleasepool)

    文章目录 1. 自动释放池 2. AutoreleasePoolPage的结构 3. 源码 1. push() 2. autorelease 3. pop() 4. Runloop & aut ...

最新文章

  1. R语言gganimate包创建可视化gif动图:ggplot2可视化静态条形图(bar plot)、gganimate包创建动态条形图(bar plot)动画、基于transition_time函数
  2. 快速傅里叶变化(周期信号)
  3. 【LeetCode刷题记】鹅厂秋招题集(2)
  4. 学习这么美丽的事,你要不要和我一起?
  5. SAP OData Gateway里uri type为metadata的请求处理逻辑
  6. 3DMax的OFusion插件的使用问题
  7. C++ new 的三种面貌
  8. 人人都能学会的python编程教程4:关系运算符与循环
  9. vue运用JsBarcode生成一维码
  10. 吴裕雄--天生自然 诗经:望海潮·东南形胜
  11. dnfdpl服务器维护了,魔兽世界TBC:地狱火半岛隐藏的“大恐怖”,魔能机甲成双出没!...
  12. CF342E Xenia and Tree
  13. java怎么判断文件大小_java判断文件大小
  14. 自然语言处理(NLP):10 基于WordAVGModel 增加Attention机制情感分析
  15. POI导出多个Excel文件,生成压缩文件
  16. 用QT做串口通讯,读取身份证信息
  17. 无需安装任何软件即可在个人电脑中创建隐私空间的方法
  18. python 自动化办公实例_Python控制Excel实现自动化办公
  19. JS遍历数组的几种方法
  20. 计算机科学与技术的职业需求,职业规划:计算机科学与技术专业就业前景

热门文章

  1. {“errmsg“:“name length invalid rid: 5fbf54ef-3a02c“,“errcode“:300002}
  2. 面试不知道如何回答这六大知识点,你还敢说熟悉MySQL?
  3. 多线程在javaweb中的应用
  4. 利用gcc自带的功能-fstack-protector检测栈溢出及其实现
  5. Shiro相关文章资料
  6. 理解Java的封装与接口
  7. 来自褪墨:个人回顾与展望/2011年的回顾和对2012年的计划
  8. HDU 1294 Rooted Trees Problem
  9. 如何安装php网站,如何安装部署PHP网站
  10. stm8s103k3 周期 捕获_STM8S103K3 - 主流基本型系列8位MCU,具有8 KB Flash、16 MHz CPU和集成EEPROM - STMicroelectronics...