自动引用计数(Automatic Reference Counting)是Objective-C默认的内存管理机制,其针对堆上的对象,由编译器自动生成操作引用计数的指令(retain或release),来管理对象的创建与释放;
受ARC管理的对象:
OC对象指针;
Block指针;
使用__attribute__((NSObject)) 定义的typedef
不受ARC管理的对象
值类型(简单值类型,C语言Struct)
使用其他方式分配的堆对象(如使用malloc分配)
非内存资源
/*******************
引用计数管理
1,新创建(使用alloc,new,copy等)一个引用类型对象,引用计数为1
2,对象引用计数增1——retain操作
(1)将对象引用赋值给其他变量或者常量
(2)将对象引用赋值给其他属性或实例变量
(3)将对象传递给函数参数,或者返回值
(4)将对象加入集合中
3,对象引用计数减1--release操作:
(1)将局部变量或全局变量赋值为nil或者他值
(2)将属性赋值为nil或他值
(3)实例属性所在的对象被释放
(4)参数或局部变量离开函数
(5)将对象从集合中删除
4,引用计数变为0时,内存自动被释放;
/******************
自动释放池:
1,autorelease可以将release的调用延迟到自动释放池被释放时
2,推荐使用自动释放池Block;当autoreleasepool结束时,所有接受autorelease消息的对象将会被立即释放;
3,AppKit和UIKit框架在处理每一次事件循环迭代时,都会将其放入一个autoreleasePool中,大多数情况,无需程序员干预;
什么时候需要手工管理AutoreleasePool?
1,编写的程序不急于 UI框架,如命令行程序;
2,在循环中创建大量临时对象,需要更早释放,避免临时对象聚集导致内存峰值过大;
3,在主线程之外创建新的线程,在新线程开始执行处,需要创建自己的AutoreleasePool;
4,可以嵌套使用Autorelease Pool.