原理
autoreleasePool 是OC中的内存自动回收机制,它可以延迟加入autoreleasepool中的变量release的时机,正常情况下,创建的变量会在超出作用域的时候release,但是如果变量加入autoreleasepool,那么release将会延迟执行。
释放时机
被autorelease修饰的对象,释放时机有两种:
如果通过代码添加一个autoreleasepool,在作用域结束时,随着pool的释放,就会释放pool中的对象。这种情况是及时释放的,并不依赖于runloop。
另一种就是系统自动进行释放,系统会在runloop开始的时候创建一个pool,进入休眠或者是退出的时候会对pool中的对象执行release操作。
数据结构
autoreleasePoolPage是一个双向链表结构如下图:当执行objc_autoreleasePoolpush() 会压入哨兵对象,当对象发送autorelease 到时候会压入需要释放的对象。当执行objc_autoreleasePoolpop() 会从栈顶开始释放对象,直到遇到第一个哨兵对象。
autoreleasePool也是和线程一一对应。