A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhou_xingyu 中级黑马   /  2015-8-4 08:41  /  326 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



MRC——手动管理内存

ARC——自动管理内存



MRC

OC采用“引用计数”(retainCount)方式管理对象占用的内存

1.      使用alloc为对象分配内存;使用dealloc释放对象所占用的内存。

2.      使用alloc、new或者copy构造对象是,对象的retainCount为1.

3.      调用对象的retain方法可以增加1 retainCount。

4.      调用对象的release方法可以减少1 retainCount。

5.      当对象的retainCount为0时,dealloc会自动调用,释放对象内存;否则分配的内存讲被一直占用。

6.      所有对象可以使用retainCount属性查看当前的计数器值。





例子:

NSString *dadyCar = [[NSStringalloc]initWithFormat:@”Car”];// dadyCar拥有对象所有权retainCount+1

NSString *mumCar = [dadyCar retain];// mumCar拥有对象所有权,retainCount+1



NSString *sonCar = [mumCar retain];// sonCar拥有对象所有权,retainCount+1



NSString * friendCar = sonCar;// friendCar不拥有对象的所有权,只是简单指向对象内存空间,retainCount不会发生变化



[dadyCar release];// retainCount-1

[mumCar release];// retainCount-1

[sonCar release];// retainCount-1

注意:

         如果所有拥有对象的引用都释放了对象的所有权(retainCount=0),那么friendCar就变成了“野指针”,因为对象已经不存在,不能再调用对象的资源。







@property(retain,nonatomic)Strdent

一个类中,如果这个类有属性声明retain或者copy的属性,那么我们需要再这个类的dealloc方法里面释放这个属性。



dealloc方法在对象引用计数为0是自动调用。

主要用于适当自身所占用的资源。永远不要手动调用dealloc,应由系统自动调用。



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马