了解Objective-C中NSAutoreleasePool使用方法

移动开发 iOS
本文主要是来介绍Objective-C中NSAutoreleasePool,NSAutoreleasePool是什么?它实际上是个对象引用计数自动处理器,先来看本文详细内容的讲解。

本文的目的是来了解Objective-CNSAutoreleasePool使用方法,Objective-C的Foundation库实际上是种运行级对象系统,与一般的对象语言,例如C++Java不一样,而与COM或者Corba一样,对象,不一定创建在用户应用程序的地址空间中,有可能是创建在另一个地址空间中,甚至创建在别的机器上!

所以,Objective-C的对象(全部继承自NSObject),就是使用引用计数的方法来管理对象的存活,众所周知,当引用计数为0时,对象就被销毁了。操作非常简单,当对象被创建时,引用计数被设成1。可以给对象发送retain消息,让对象对自己的引用计数加1。

而当对象接受到release消息时,对象就会对自己的引用计数进行减1,当引用计数到了0,对象就会呼叫自己的dealloc处理,一切都需要程序员亲力亲为,一点马虎不得。

可是,NSAutoreleasePool是什么?它实际上是个对象引用计数自动处理器。

首先,NSAutoreleasePool可以同时有多个,它的组织是个栈,总是存在一个栈顶pool,也就是当前pool,每创建一个pool,就往栈里压一个,改变当前pool为新建的pool,然后,每次给pool发送drain消息,就弹出栈顶的pool,改当前pool为栈里的下一个pool。

接下来要注意,对象,并不是自动被加入到当前pool中,而是需要对对象发送autorelease消息,这样,对象就被加到当前pool的管理里了。

当当前pool接受到drain消息时,它就简单的对它所管理的所有对象发送release消息。

到了这里,一定会发现这个所谓的pool有个坑人的特性,即,如果pool中被管理的对象接受到pool发送的那个release消息后,它的引用计数大于0,那么pool虽然消失了,但是那个对象还是存在的!

小结:了解Objective-CNSAutoreleasePool的内容介绍完了,希望本文对你有所帮助!

责任编辑:zhaolei 来源: 博客园
相关推荐

2011-07-19 17:18:35

Objective-C Property

2011-08-10 17:16:01

Objective-C静态变量

2011-08-22 15:31:35

Objective-C协议

2011-08-10 11:08:32

Objective-C字符串NSString

2011-08-15 17:47:13

Objective-CisMemberOfC

2011-08-17 11:05:22

Objective-C方法

2011-08-05 15:56:03

Objective-C 消息 函数

2011-08-01 11:37:41

iPhone Objective- 内存

2011-07-27 16:18:42

Objective-c 协议

2011-07-22 15:10:51

Objective-C 文件

2011-07-26 10:50:50

Objective-C Selector

2011-08-04 13:32:21

Objective-C 方法 对象

2011-08-10 18:07:29

Objective-C反射

2011-07-25 10:14:13

Objective-C Xcode

2011-07-25 10:30:41

Objective-C Xcode 重构

2011-07-25 11:02:29

Objective-C Xcode 标签

2011-08-04 13:55:10

Cocoa Objective- 文件

2011-07-20 13:34:37

Objective-C self.

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用键

2011-05-11 11:20:26

Objective-C
点赞
收藏

51CTO技术栈公众号