OC学习小结之内存管理

一 、什么是内存管理

 1)  内存管理意义

由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。主要是管理继承了 NSObject 的对象,对基本数据类型无效。本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也被回收,此时对象已经没有指针指向,但依然存在于内存中,造成内存泄露

2)对象的基本结构

每个OC对象都有自己的引用计数器,是一个整数,表示“对象被引用的次数”,即有多少人正在使用这个OC对象。每个OC对象内部专门有4个字节的存储空间来存储引用计数器。

二、内存管理的机制

ObjC中提供了一个机制来实现上面提到的这个逻辑模型,它被称为“引用计数”(retain counting):
  • ·每一个对象都有一个引用计数(retain count) 
  • · 对象被创建的时候,引用计数的值是1 
  • · 当引用计数值是0的时候,对象将被系统统一销毁 
  • · 我们可以通过调用一些方法来操作引用计数的值
获得所有权的方法:
  • · alloc:为一个新对象分配内存,并且它的引用计数为1。调用alloc方法,你便有对新对象的所有权
  • · copy:制造一个对象的副本,该副本的 引用计数为1,调用者具有对副本的所有权
  • · retain:使对象的引用计数加1,并且获得对象的所有权

放弃所有权的方法:

  • · release:使对象的引用计数减1,并且放弃对象的所有权
  • · autorelease:使对象的引用计数在未来的某个时候减1,并且在那个时候放弃对象的所有权

三、内存管理的原则

  • 对你自己拥有的对象负责,你只能释放你拥有的对象
  • 凡是通过retain,alloc,copy等手段获得了所有权的对象,都必须在你不在使用他的时候,由你来调用release,autorelease等手段来释放对他的所有权
  • 在一定的代码段内,对同一个对象所做的 copy,alloc和retain的操作次数应当与release和 autorelease操作的次数相等
  • 可以在类的dealloc方法中释放你所占有的实例变量
  • 对于便利构造器和访问起来说,你没有通过上面的这些手段获得对象的所有权,因此在这些情况下你无须对获得对象进行额外的释放操作
  • autorelease只不过意味着“预定延迟发送一条release消息”,当前的引用计数器并没有变




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值