1.自动释放池是oc的一种内存自动管理机制
2.当自动释放池销毁时,它会对池子中的每一个对象调用一次release方法
3.当我们向对象发送autorelease消息时,这个对象就放入了自动释放池
4.自动释放池可以嵌套使用
5.autorelease会将对象添加到离它最近的自动释放池
6.快速创建自动释放池:
@autorelease{//等价于[ [ NSAutoreleasepool alloc] init ];
}//等价于[ pool release ];
7.自动释放池是一个容器,通过栈结构进行管理(先进后出原则)
8.[ pool autorelease ];是错误的写法——>cannot autorelease an autorelease pool
9.千万不要在dealloc方法中使用autorelease
10.把对象添加到数组或字典中,那么此对象会被retain,引用计数+1;
把对象从数组或字典当中移除,那么此对象会被release,引用计数-1.
11.ARC自动引用计数(automatic reference counting),提供自动管理内存的功能,不需要也不允许retain、release、autorelease
12.ARC的黄金法则:只要还有一个变量(指针)指向对象,对象就会保持在内存中
13.内存的区域划分:
(1)栈:栈区(stack)由系统自动分配和释放,存放局部变量的值等。容量小,速度快,有序
(2)堆:一般由程序员分配和释放,如果不释放,则出现内存泄露。程序退出时,系统会回收你的内存。特点:无序,速度慢,容量大
(3)静态存储区:全局变量(外部变量)和静态变量都存放在静态区域。当程序结束时,系统回收
(4)常量区:存放常量的内存区域,程序结束时,系统回收
(5)代码区:存放二进制代码的区域
14.禁止某些文件使用ARC:对于某些我们不希望使用ARC的文件,例如第三方库源文件,可以在Project Settings——>Build Phases中,对这些文件选中-fno-objc-arc标志。这样Xcode编译项目时,这些文件就不会使用ARC