ARC 自动引用计数(OC内存管理机制)
管理对象的创建与释放(主要管理OC 对象指针,不管理值类型(包括struct),malloc分配的堆对象)
引用计数管理
新创建对象,对象的引用计数为1
引用计数+1:
1. 赋值给其他变量
2. 赋值给属性或实例变量
3. 传参(离开函数时引用计数-1)
4. 将对象加入集合中
引用计数-1:
1. 将变量赋值为nil或其他值
2. 将属性赋值为nil或其他值
3. 实例属性所在的对象被释放
4. 参数离开函数
5. 将对象从集合中删除
引用计数为0时,内存自动被释放
(main栈、变量属性、静态数据区(全局变量)、函数栈上的指针指向对象时计入ARC)
自动释放池Autorelease Pool
autorelease可以将release延迟到自动释放池释放时
推荐使用@autoreleasepool{}
手工管理autoreleasepool
1. 命令行程序(非UI框架)
2. 函数中创建大量临时对象,需要提前手工释放
(3. 主线程之外的新线程开始执行处)
4. 可以嵌套使用