iOS知识复习笔记(6)--- 自动释放池AutoreleasePool

原理

autoreleasePool 是OC中的内存自动回收机制,它可以延迟加入autoreleasepool中的变量release的时机,正常情况下,创建的变量会在超出作用域的时候release,但是如果变量加入autoreleasepool,那么release将会延迟执行。

释放时机

被autorelease修饰的对象,释放时机有两种:

  1. 如果通过代码添加一个autoreleasepool,在作用域结束时,随着pool的释放,就会释放pool中的对象。这种情况是及时释放的,并不依赖于runloop。

  2. 另一种就是系统自动进行释放,系统会在runloop开始的时候创建一个pool,进入休眠或者是退出的时候会对pool中的对象执行release操作。

具体时间如图:
runloop-autorelease.png

数据结构

autoreleasePoolPage是一个双向链表结构如下图:
autoreleasePool.png

当执行objc_autoreleasePoolpush() 会压入哨兵对象,当对象发送autorelease 到时候会压入需要释放的对象。当执行objc_autoreleasePoolpop() 会从栈顶开始释放对象,直到遇到第一个哨兵对象。

autoreleasePool也是和线程一一对应。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容