autorelease本质上就是延迟调用release方法
autorelease对象什么时候释放?
引用计数为0的时候才会释放, 不是出了pool就释放
在一些很消耗内存的循环调用的场景下有时需要手动干预autoreleased对象的释放时机, 不然会导致内存暴增, 最终导致程序崩溃
NSThread和NSRunLoop是一一对应的关系
在NSRunLoop对象的每个运行循环开始前,系统会自动创建一个autoreleasepool,并在运行循环结束时drain掉这个pool, 同时释放掉所有autoreleased对象
autoreleasepool只会对应一个线程, 每个线程可能会对应多个autoreleasepool
使用block版本的枚举时候,内部会自动添加一个autoreleasepool
普通的for循环forin循环没有,所以还是新版的block更方便, 但新能还是forin更高
1.如果你编写的程序不是基于UI框架的比如命令行工具
2.for循环中遍历生产大量autorelease变量时, 就需要手动添加局部autoreleasepool来进行手动干预
3.如果你创建一个子线程, 一般会自定义继承自NSOpertaion的操作, 在main方法中要加上, 子线程上是无法访问主线程的自动释放池所以的自己创建
本文详细解释了autorelease的工作原理及autoreleasepool的作用,阐述了如何通过手动干预autoreleased对象的释放时机来避免内存溢出,同时介绍了NSThread与NSRunLoop的关系及其在 autorelease机制中的应用。

2305

被折叠的 条评论
为什么被折叠?



