AutoreleasePool

2018-04-14  本文已影响22人  CoderLF

一、AutoreleasePool是什么

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

二、使用场景

ARC时代,在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop。

 - (void)enumerateObjectsUsingBlock:
 - (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:
 - (void)enumerateObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts usingBlock:

三、实现原理

每个Cocoa的线程都会默认标配一个Autorelease Pool,但是你也可以手动创建多个。从前面的操作中,也应该能隐约猜出来了些许,有push和pop操作,意味着每个pool的管理其实是一种类似栈结构的进栈出栈操作,当然pool的管理更复杂些,因为它可以创建多个,还可以嵌套创建删除
具体实现:实现原理(参考1)
实现原理(参考2)

上一篇 下一篇

猜你喜欢

热点阅读