WEB开发网
开发学院手机开发iPhone 开发 iPhone ObjectC的NSAutoreleasePool 阅读

iPhone ObjectC的NSAutoreleasePool

 2010-12-19 07:19:36 来源:WEB开发网   
核心提示:ObjectC的NSAutoreleasePoolObjectC的Foundation库实际上是种运行级对象系统,与一般的对象语言,iPhone ObjectC的NSAutoreleasePool,例如C++,Java不一样,如果pool中被管理的对象接受到pool发送的那个release消息后,它的引用计数大于0,而

ObjectC的NSAutoreleasePool

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

所以,ObjectC的对象(全部继承自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虽然消失了,但是那个对象还是存在的!

Tags:iPhone ObjectC NSAutoreleasePool

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接