AutoreleasePool 内部逻辑

参考sunnyxx的http://blog.sunnyxx.com/2014/10/15/behind-autorelease/

C++实现的一个类 AutoreleasePoolPage

@autoreleasepool{}     转化为如下代码

void *context = objc_autoreleasePoolPush();  //context 就是哨兵地址

// {}中的代码

objc_autoreleasePoolPop(context);  //release context之后的所有autoreleased的obj

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

手加Autorelease Pool的情况下,就是@autoreleasepool{} 右括号之后

你可能感兴趣的:(AutoreleasePool 内部逻辑)