31 (OC)* 内存管理

时间:2022-12-12 09:08:18

31 (OC)  内存管理

一:内存管理黄金法则。

如果对一个对象使用了alloc、[Mutable]copy,retain,那么你必须使用相应的realease或者autorelease

二:内存管理机制

cocoa中的内存管理机制——引用计数

引用计数(reference counting)又称为保留计数(retain counting),引用计数的数值表示有几个其它对象在使用它。

每一个对象都拥有一个引用计数

2.1:当对象被创建的时候,引用计数的值为1

2.2:当发送retain消息的时候,该对象的引用计数加1,该对象的引用计数为2

2.3:当这个对象发送release消息的时候,该对象的引用计数减1

2.4:当一个对象的引用计数为0时,系统自动调用dealloc方法,销毁该对象。

子类的某些实例是继承自父类的,因此,我们需要调用父类的dealloc方法,来释放父类拥有的这些对象。

一般来说调用的顺序是,当子类的对象释放完时,然后再释放父类的所拥有的实例,这一点与调用初始化方法,正好相反。

当一个所有者(可以是任何一个OC对象)做了以下某个动作的时候,它就拥有了对一个对象的所有权。

(1)如果创建或者复制某个对象时,则拥有了该对象的所有权,即包含下列关键词时:

alloc,allocWithZone:,copy,copyWithZone:,mutableCopy,mutableCopyWithZone:

(2)如果没有创建或复制对象,而是保留引用,同样拥有该对象的使用权

retain

(3)当拥有了某个对象的所有权,在不需要某一个对象时,需要释放他们,用

release,autoRelease

三:关于ARC(Auto reference counting)自动引用计数

当你在编译程序的时候提供自动管理内存的功能,它会自动加入内存的控制代码,控制对象的生命周期,大大简化了内存管理的步骤,ARC管理内容的原理就是,编译器会在适当的地方自动插入retain、release和autorelease消息,但是注意版本,是在ios4及以上(不是很确定)