首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Objective-C的内存储器管理(一)黄金法则的理解

2012-06-20 
Objective-C的内存管理(一)黄金法则的理解一、内存管理黄金法则:The basic rule to apple is everything th

Objective-C的内存管理(一)黄金法则的理解

一、内存管理黄金法则:

The basic rule to apple is everything thatincreases the reference counter with alloc,[mutable]copy[WithZone:] or retainis in charge of the corresponding [auto]release.

如果一个对象使用了alloc,[mutable] copy,retain,那么你必须使用相应的release或autonrelease


二、内存管理类型分类

基本类型和C语言的类型:如:

int,short,char,struct,enum,union等类型

OC类型:任何继承于NSObject对象都属于OC的类型。

我们讲的内存管理实际上是对OC类型的内存管理,它对基本数据类型和C语言的类型并不管用。


三、C和C++内存管理的不足

Objective-C的内存储器管理(一)黄金法则的理解

如上,又3个引用指向了这一块内存,任何一个调用了free方法释放这个内存,而其余的引用在不知道的情况下继续使用这块内存的时候,就会出现问题。何时由谁去释放这块内存,这就是C和C++在内存管理上的混乱。


四、OC对象在内存中的结构

所有的OC类型的对象的结构如下,这个对象的内存在包含自己的变量和方法的基础上,还有一个包含retainCount的引用计数。

每一个OC对象都有一个4个字节的retainCount的计数器。表示当前对象被引用的计数。如果计数为0,那么就真正的去释放这个对象。

 

Objective-C的内存储器管理(一)黄金法则的理解
 

规则:

1、Objective-C类中实现了引用计数器,对象知道自己当前被引用的次数

2、最初对象的计数器为1

3、如果需要引用对象,可以给对象发送一个retain消息,这样对象的计数器就加1

4、当不需要引用对象了,可以给对象发送release消息,这样对象计数器就减1

5、当计数器减到0,自动调用对象的dealloc函数,对象就会释放内存

6、计数器为0的对象不能再使用release和其他方法


五、举例说明

比如有一个引擎类Engine,有一个汽车类Car,Car里面有一歌Engine的实例变量,一个setter和getter方法。具体如下

对于copy属性有一点要主要,被定义有copy属性的对象必须要符合NSCopying协议,并且你还必须实现了-(id)copyWithZone:(NSZone*)zone该方法。



可以看到,使用retain和我们上面举得例子完全相同,所以我们可以使用property和它的retain代替之前的写法。









2楼LonelyRoamer3小时前
[quote=weiqubo]你这不搞笑么,还叫C/C++内存管理的不足,显然是你不会管理.nC++你想怎么管理都行,前提是你会管...[/quote]n既然C++内存管理这么牛,那怎么还受这么多人诟病呢。当然,他的机制肯定是没有问题的,就是使用方法的问题,比较难把握。特别是很多人做同一个项目的时候。
1楼weiqubo23小时前
你这不搞笑么,还叫C/C++内存管理的不足,显然是你不会管理.nC++你想怎么管理都行,前提是你会管理.

热点排行