自动引用计数

来源:互联网 发布:江西先锋软件技术学院 编辑:程序博客网 时间:2024/06/05 04:23

1.1、什么是自动引用计数

顾名思义,自动引用计数是指内存管理中对引用采取自动计数的技术。以下摘自苹果的官方说明。


OC中采用ARC机制,让编绎器来进行内存管理。在新一代Apple LLVM编绎器中设置ARC为有效状态,就无需再次键入retain或者release代码,这在降低程序崩溃、内存泄露等风险的同时,

很大程度上减少了开发程序的工作量。编绎器完全添楚目标对象,并能立刻释放那些不再被使用的对象。如此一来,应用程序将具有可预测性,且能流畅运行速度也将大幅提升。


1.2 内存管理 /引用计数


解决这一问题的办法是使办公室在还有至少一个人的情况下保持开类状态,而在无人时保持关灯状态。

1)最早进入办公室的人开灯。

2)之后进入办公室的人,需要照明。

3)下班离开办公室的人,不需要照明。

4)最后离开办公室的人关灯(此时已无人需要照明)。



OC中,对象相当于办公室的照明设备,


1.2.2 内存管理的思考方式


看到引用计数这个名称,我们便会不自觉地联想到

某处有某物多少多少而将注意力放到计数上。

但其实,更加客观、正确的思考方式是:

自己生成的对象,自己所持有。

非自己生成的对象,自己也能持有。

不再需要自己持有的对象时释放。

非自己持有的对象无法释放。


引用计数式内存管理的思考方式仅此而已。

上文出现了生成持有释放三个词。而在OC内存管理中还要加上废弃一词。


对象操作        方法

生成并持有对象  alloc new  copy  mutableCopy等方法

持有对象  retain方法

释放对象  release方法

废弃对象  dealloc方法


这些有关OC内存管理的方法,实际上不包括在该语言中,而是包含在Cocoa框架中用于OS XiOS应用开发。

Cocoa框架中Foundation框架类库的NSObject类担负内存管理的职责。OC内存管理中的alloc/retain/release/dealloc

方法分别指代NSObject类的alloc类方法、retain实例方法、release实例方法和dealloc实例方法。


使用以下名称开头的方法名意味着自己生成的对象只有自己持有:

alloc

new

copy

mutableCopy


copy方法利用基于NSCopying方法约定,由各类实现的copyWithZone:方法生成并持有对象的副本。

copy方法类似,mutableCopy方法利用基于NSMutableCopying方法约定,由各类实现的mutableCopyWithZone:方法生成并持有对象的副本。

两者的区别在于, copy方法生成不可变更的对象,而mutableCopy方法生成可变更的对象。这类似于NSArray类对象与NSMutableArray类对象的差异。

用这些方法生成的对象,虽然是对象的副本,但同allocnew方法一样,在自己生成并持有对象这点上没有改变。


不常用的方法:

根据上述使用以下名称开头的方法名,下列名称也意味着自己生成并持有对象。

allocMyObject

newThatObject

copyThis

mutableCopyYourObject





0 0
原创粉丝点击