1.为什么要进行内存管理
- 程序运行时的内存资源是有限的,object-c语言所编写的程序中需要实例化对象。
- 对象是占用内存的,如果创建了对象(分配了内存),而不去释放这些对象的内存,将会发生泄漏
- 程序所使用的内存会随着 程序对象 的增加而不断怎加
- 最终内存被耗尽只是就是程序崩溃之时
- IOS系统为米一个程序分配了30M内存,程序使用内存超过20M会收到警告,超过30M 会吵嚷声程序
- 管理范围:任何继承NSobjext的对象,对其他的基本数据类型无效
2.对象的生命周期
- 程序中的对象具有生命周期包括以下几个时期
-对象的初始化
-对象接收信息
-对象被释放
- 如果对象不存在了,其所占用的内存应该交还给系统已被其他新的对象来使用
- 采用引用计数器的技术得知一个对象的寿命是否结束
3.引用计数器的操作方法
- 当使用alloc、retain方法或者copy消息创建一个对象时,对象引用计数器,可以向对象发送retain消息
- 如果要增加某个消息对象的引用计数器,可以向对象发送release或者autorelease消息
- 如果想要获取某个对象当前引用计数器的值,可以向对象发送retaincount消息
- 通 常我们没有必要去特地查询一个对象的retain count是多少。查询的结果常常会出乎意料。你不清楚framework里面的其他对象对你感兴趣的这个对象进行了多少retain操作。在debug 内存管理的问题时候,你只要关注保证你的代码符合所有者规则即可。
- 所谓的所有者规则,也就是谁拥有谁释放,或者是谁创建谁释放,通俗的来讲就是,在哪里让其+1了,就要在相应的地方-1,如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者autorelease方法,不是你创建的就不用你去负责
5.引用计数
- 每一个对象有一个整数值,这个整数值与对象本身关联,称为引用计数器
- 当某写地方需要使用这个对象时,可以将计数器加1,表示需要使用这个对象
- 使用完毕后,将该对象的引用计数器值减1,表示对象已经使用完毕
- 如果引用计数器值为0时,表明没有地方在使用该对象,这时系统将销毁该对象,其所占用内存被收回,以便重用