OC 内存管理

一、什么是内存管理

由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。
管理范围:任何继承NSObject的对象,对其他的基本数据类型无效。

二、操作

判断对象要不要回收的唯一依据就是计数器是否为0,若不为0则存在。所以对内存的管理就是对计数器的管理

  1> retain : 计数器 +1, 会返回对象本身

  2> release : 计数器 -1 ,没有返回值
  3> retainCount : 获取当前的计数器
  4> dealloc 
* 当一个对象要被回收的时候,就会调用

* 一定要调用 [super dealloc], 这句调用要放在最后面

三、 对象的销毁

当一个对象的引用计数器为0时,那么它将被销毁,其占用的内存被系统回收。
当对象被销毁时,系统会自动向对象发送一条dealloc消息,一般会重写dealloc方法,在这里释放相关的资源,dealloc就像是对象的“临终遗言”。一旦重写了dealloc方法就必须调用[super dealloc],并且放在代码块的最后调用(不能直接调用dealloc方法)。
一旦对象被回收了,那么他所占据的存储空间就不再可用,坚持使用会导致程序崩溃(野指针错误)。

四、 什么是野指针、僵尸对象

  1> 僵尸对象: 所占用内存已经被回收的对象, 僵尸对象不能再使用 (EXC_BAD_ACCESS)
  2> 野指针: 指向僵尸对象(不可用内存) 的指针。给野指针发送消息会报错 
  3> 空指针: 没有指向任何东西的指针(存储的东西是 nil、null、0),给空指针发送消息不回报错。


五、内存管理代码规范:

  1.只要调用了alloc, 就必须 release (autorelease)

  2.set 方法的代码规范

  1> 基本数据类型: 直接复制
<pre name="code" class="objc">- (void)setAge:(int)age
{
	_age = age;
}


 
  
 
  
 
  
 
 
  2> OC对象类型
<pre name="code" class="objc">- (void)setCar:(Car *)car
{
	// 1.先判断是不是新传进来的对象
	if(car != _car)
	{
		// 2.对旧对象做一次release
		[_car release];
		// 3.对新对象做一次 retain
		_car = [car retain];
	}
}


 
  

 
  
 
 

  3.dealloc 的代码

  1> 一定要 [super dealloc], 而且放到最后面
  2> 对 self (当前)所拥有的其他对象 做一次 release
<pre name="code" class="objc">- (void)dealloc
{
	[_car release];
	[super dealloc];
}


 
  

 
  
 
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值