自动引用计数ARC

自动引用计数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

你可能感兴趣的:(自动引用计数ARC)