iOS之深入解析自动释放池autoreleasepool的底层原理
一、自动释放池 autoreleasepool 原理
- 自动释放池是 OC 中的一种内存自动回收机制,它可以将加入 autoreleasePool 中的变量 release 的时机延迟。
- 简单来说,就是当创建一个对象,在正常情况下,变量会在超出其作用域的时立即release。
- 如果将对象加入到了自动释放池中,这个对象并不会立即释放,会等到 runloop 休眠,超出 autoreleasepool 作用域{}之后才会被释放。
- 自动释放池 autoreleasepool 其机制如下图所示:
- autoreleasepool 机制流程:
- 从程序启动到加载完成,主线程对应的 runloop 会处于休眠状态,等待用户交互来唤醒 runloop;
- 用户的每一次交互都会启动一次 runloop,用于处理用户的所有点击、触摸事件等;
- runloop 在监听到交互事件后,就会创建自动释放池,并将所有延迟释放的对象添加到自动释放池中;
- 在一次完整的 runloop
iOS之深入解析自动释放池autoreleasepool的底层原理相关推荐
- iOS之深入解析objc_msgSend消息转发机制的底层原理
一.抛砖引玉 objc_msgSend() 消息发送的过程就是 通过 SEL 查找 IMP 的过程 . objc_msgSend() 是用 汇编语言 实现的,使用汇编实现的优势是: 消息发送的过程需要 ...
- [Objective-C] 自动释放池(Autoreleasepool)--拆迁队的外援
C#妹妹:内存的清理跟生活中的拆迁一样是个麻烦事情啊 Objective-C阿姨:是啊,该拆的不拆,占用空间,不该拆的拆了,程序崩溃 C#妹妹:说白了,难度不在拆上,在判定上,判断到底那些内存是用不上 ...
- 自动释放池autoreleasepool
自动释放池是NSAutoreleasePool的实例,其中包含了收到autorelease消息的对象.当一个自动释放池自身被销毁(dealloc)时,它会给池中每一个对象发送一个release消息(如 ...
- iOS之深入解析dyld与ObjC关联的底层原理
App启动与dylb加载 我们知道 dyld 的加载过程,即在 App 启动启动执行 main 函数之前,dylb 主要作了环境变量配置.共享缓存.主程序的初始化.插入动态库.链接主程序.链接动态库. ...
- iOS之深入解析内存管理Tagged Pointer的底层原理
一.前言 ① Tagged Pointer 概念 iOS 开发者对"引用计数"这个名词肯定不陌生,引用计数是苹果为了方便开发者管理内存而引入的一个概念.当引用计数为 0 时,对象就 ...
- iOS之深入解析类方法+load与+initialize的底层原理
一.前言 Objective-C 作为一门面向对象语言,有类和对象的概念.编译后,类相关的数据结构会保留在目标文件中,在运行时得到解析和使用.在应用程序运行起来的时候,类的信息会有加载和初始化过程. ...
- iOS之深入解析Runtime的objc_msgSend“快速查找”底层原理
Runtime 一.什么是 runtime ? Objective-C 语言将尽可能多的决策从 编译时和链接时 推迟到运行时.只要有可能,它就 动态 地做事情,这意味着该语言不仅需要一个编译器,还需要 ...
- 内存管理-定时器循环、内存布局、tagged pointer、weak指针、copy、自动释放池
先上代码,我们平时用的定时器,cadisplaylink.nstimer,CADisplayLink.NSTimer会对target产生强引用,如果target又对它们产生强引用,那么就会引发循环引用 ...
- 12.06-自动释放池(autoreleasepool)
文章目录 1. 自动释放池 2. AutoreleasePoolPage的结构 3. 源码 1. push() 2. autorelease 3. pop() 4. Runloop & aut ...
最新文章
- R语言gganimate包创建可视化gif动图:ggplot2可视化静态条形图(bar plot)、gganimate包创建动态条形图(bar plot)动画、基于transition_time函数
- 快速傅里叶变化(周期信号)
- 【LeetCode刷题记】鹅厂秋招题集(2)
- 学习这么美丽的事,你要不要和我一起?
- SAP OData Gateway里uri type为metadata的请求处理逻辑
- 3DMax的OFusion插件的使用问题
- C++ new 的三种面貌
- 人人都能学会的python编程教程4:关系运算符与循环
- vue运用JsBarcode生成一维码
- 吴裕雄--天生自然 诗经:望海潮·东南形胜
- dnfdpl服务器维护了,魔兽世界TBC:地狱火半岛隐藏的“大恐怖”,魔能机甲成双出没!...
- CF342E Xenia and Tree
- java怎么判断文件大小_java判断文件大小
- 自然语言处理(NLP):10 基于WordAVGModel 增加Attention机制情感分析
- POI导出多个Excel文件,生成压缩文件
- 用QT做串口通讯,读取身份证信息
- 无需安装任何软件即可在个人电脑中创建隐私空间的方法
- python 自动化办公实例_Python控制Excel实现自动化办公
- JS遍历数组的几种方法
- 计算机科学与技术的职业需求,职业规划:计算机科学与技术专业就业前景
热门文章
- {“errmsg“:“name length invalid rid: 5fbf54ef-3a02c“,“errcode“:300002}
- 面试不知道如何回答这六大知识点,你还敢说熟悉MySQL?
- 多线程在javaweb中的应用
- 利用gcc自带的功能-fstack-protector检测栈溢出及其实现
- Shiro相关文章资料
- 理解Java的封装与接口
- 来自褪墨:个人回顾与展望/2011年的回顾和对2012年的计划
- HDU 1294 Rooted Trees Problem
- 如何安装php网站,如何安装部署PHP网站
- stm8s103k3 周期 捕获_STM8S103K3 - 主流基本型系列8位MCU,具有8 KB Flash、16 MHz CPU和集成EEPROM - STMicroelectronics...