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{} 右括号之后

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容