标签:c objective-c ios c语言 内存
由于移动设备的内存极其有限,所以每个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]; }
标签:c objective-c ios c语言 内存
原文地址:http://blog.csdn.net/wangxiaoit/article/details/43378323