在OC的引用计数的架构中,有一特性叫做“自动释放池”。释放对象的方式有两种:1、一种是调用release方法,该方法使其保留计数立即递减;2、调用autorelease方法,将其加入“自动释放池中”。自动释放池用于存放哪些需要在稍后某个时刻释放的对象。清空自动缓存池时,系统会向其中的对象发送release消息。
创建自动释放池的语法如下:
@autoreleasepool{
//.........
}
自动释放池一般不用自己手动创建,在main函数中存在如下的自动缓存池标识:
但是有时我们可以手动创建自动释放池,考虑如下这段代码:
这样一来,在执行for循环时,应用的程序内存占有量会持续上涨,而等到所有临时对象都释放后,内存用量又会突然降下来。
如果把循环内的代码包裹在”自动释放池“中,那么在循环中自动释放的对象就会放在这个池中而不是线程的主自动释放池中。 应用程序在执行循环时的内存峰值就会降低。
自动释放池机制类似于”栈“,系统创建好自动释放池之后,就将其推入栈中,而清空自动释放池时,则相当于将其走栈中弹出。