一、 什么是内存管理:
1> 移动设备的内存有限,每个app所能占用的内存是有限制的
2> 当app多占用的内存较多的时候,系统会发出警告,这时就得回收一些不需要再使用得内存空间,比
如回收一些不需要得对象,变量等。
二 、如何管理内存
对象的基本结构:
1> 每个oc对象都有自己的引用计数器,是一个整数,表示“对象被引用的次数”,即有多少个人正
在使用这个oc对象
2> 每个oc对象内部专门有4个字节的存储空间
引用计数器的作用
1> 使用alloc 、new 、 copy 创建出来的新对象的计数器值默认为 1
2>当对象的引用计数器为0时,该对象会被回收
引用计数器的操作
1> 给对象发送一条 retain 消息,可以使该对象的引用计数器值+1(retain 方法返回本身)
例如: _age = [age retain]
2> 给对象发送一条release消息,可以使该对象的引用计数器值-1
3> 给对象发送一条retaincount消息,可以获取该对象当前的引用计数器值
对象的销毁
1> 当一个对象值为0时,那么它将被销毁,占用的内存被系统回收
2> 当一个对象被销毁时,系统会自动想对象发送一条dealloc 消息
3> 一般会要重写dealloc方法,在这里释放相关资源。dealloc就像对象的遗言
dealloc方法重写
1> 在dealloc 中一定要调用[super dealloc]方法,而且要放到最后面
内存管理原则
1> 对你拥有的对象负责,你只能释放你拥有的对象
2> 由alloc 、 new 、 copy 来创建的对象,都必须在不使用的时候进行 release 或者 autorelease 来对对象
的计数器归0
3> 在一定的代码里面 ,对同一对象做的alloc 、 new 、 copy 的操作次数应该于 release 、autorelease 的
操作次数相同
什么是野指针?
野指针:就是指向僵尸对象(所占用内存已经回收的对象,不能再被使用)的指针
在内存管理中常见的经典错误
EXE __BAD__ACCESS 这句话表示访问的是坏内存
多个对象之间的内存管理
1> 使用某个对象时,让对象的引用计数器+1 (retain)
2> 不想使用对象时,让对象的引用计数器-1(release)
3> 谁retain, 谁 release
4> 谁alloc ,谁release
注意:
不是通过alloc产生的对象就不需要release