内存管理

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时,表明没有地方在使用该对象,这时系统将销毁该对象,其所占用内存被收回,以便重用

 

 

 

 

原文地址:https://www.cnblogs.com/banchuangshuying/p/4929948.html