一、手动内存管理快速入门
1、引用计数器:
用来保存当前对象有几个拥有者或者有几个东西在使用它(数字)
2、引用计数器的作用:
用来判断对象是否应该回收内存空间(如果对象不等于nil,当引用计数器为0,此时要回收对象的内存空间)
3、引用计数器的操作:
retain:使得引用计数器+1
releas:使得引用计数器-1
retainCount:得到引用计数器的值
4、如果一个对象被释放的时候,会有一个“临终遗言”(会调用该对象的dealloc方法)
注意:
1)dealloc 方法是NSObject的,一般我们要重写dealloc方法
2)在dealloc 方法的内部,要调用[super dealloc];
5、手动内存管理:
MRC:手动内存管理
ARC:自动内存管理
注意:我们创建一个项目,此时默认的是ARC(自动内存管理)
把项目从 ARC 模式改成 MRC 模式
二、内存管理原则
内存管理:
对象如果不在使用了,就应该回收他的空间,防止造成内存泄露
内存管理的范围:
管理任何继承了NSObject的对象的内存管理,基本数据类型内存不需要我们管理
内存管理的原则:
1)原则
只要还有人在使用某个对象,那么这个对象就不会被回收;
只要你想使用某个对象那么就应该让该对象(retain 一次)的引用计数器+1;
当你不想使用这个对象时,就应该让对象(release 一次)的引用计数器-1;
2)谁创建,谁release
(1)如果你通过alloc,new,copy创建一个对象,那么你就必须调用release 或者 autorelease方法
(2) 不是你创建的就不需要你负责
3)谁retain,谁release
只要你retain 了,无论对象如何生成的,你都要调用release
4)总结:
有始有终,有加就有减。曾经让某个计数器+1,就应该让其在最后-1。
三、 内存管理研究内容:
1、野指针:1)定义的指针变量没有初始化 2)指向的空间已经被释放了
2、内存泄露:栈区的空间被回收了,而堆区的空间还在
*/
|
|