参考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{} 右括号之后
网友评论