自动引用计数笔记(极客班)

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

你可能感兴趣的:(自动引用计数笔记(极客班))