自动引用计数ARC,OC默认的内存管理机制,针对堆上的对象,由编译器自动生成操作引用计数的指令(retain或release),来管理对象的创建与释放
哪些对象受ARC管理
OC对象指针
Block指针
使用_attribute_((NSObject))定义的typedef
哪些对象不受ARC管理
值类型
使用其他方式分配的堆对象(如使用malloc分配)
非内存资源
新创建一个引用类型对象,引用计数为1
对象引用计数增1,retain操作:
将对象引用赋值给其他变量或常量;
将对象引用赋值给其他属性或实例变量;
将对象传递给函数参数,或返回值;
将对象加入集合中
对象引用计数减1,release操作:
将局部变量或全局变量赋值为nil或其他值;
将属性赋值为nil或其他值;
实例属性所在的对象被释放;
参数或局部变量离开函数;
将对象从集合中删除
引用计数变0时,内存自动被释放
自动释放池Autorelease Pool
autorelease可以将release的调用延迟到自动释放池被释放的时候
什么时候要手工管理Autorelease Pool
编写的程序不基于UI框架,如命令行程序;
在循环中创建大量的临时对象,需要更早地释放,避免临时对象聚集导致内存峰值过大;
在主线程之外创建新的线程,在新线程开始执行处,需要创建自己的Autorelease Pool;
可以嵌套使用Autorelease Pool