NSOperationQueue和NSAutoReleasePool有什么区别

时间:2012-04-24 06:50:51

标签: iphone nsoperationqueue nsautoreleasepool

任何人都可以向我介绍NSOperationQueueNSAutoReleasePool

之间的完美区别

2 个答案:

答案 0 :(得分:6)

NSOperationQueue 类调节一组NSOperation对象的执行。添加到队列后,操作将保留在该队列中,直到明确取消或完成其任务为止。队列内的操作(​​但尚未执行)本身根据优先级和操作间对象依赖性进行组织,并相应地执行。应用程序可以创建多个操作队列并向其中任何一个提交操作。

操作间依赖关系为操作提供绝对执行顺序,即使这些操作位于不同的操作队列中也是如此。在所有相关操作完成执行之前,操作对象不被视为准备执行。对于准备执行的操作,操作队列始终执行相对于其他就绪操作具有最高优先级的操作。

<强> NSAutoreleasePool 在引用计数环境中(与使用垃圾收集的环境相反),NSAutoreleasePool对象包含已收到自动释放消息的对象,并且在排空时,它会向每个对象发送释放消息。因此,发送自动释放而不是释放到对象会延长该对象的生命周期,至少直到池本身耗尽(如果随后保留该对象,则可能更长)。一个对象可以多次放入同一个池中,在这种情况下,每次将它放入池中时都会收到一条释放消息。

使用通常的alloc和init消息创建一个NSAutoreleasePool对象,并使用drain(或release)处理它以了解其中的差异,请参阅“Garbage Collection”)。由于您无法保留自动释放池(或自动释放它 - 请参阅保留和自动释放),因此耗尽池最终会释放它。您应该始终在创建它的相同上下文(调用方法或函数或循环体)中排出自动释放池。有关详细信息,请参阅自动释放池。

更多访问以下指南...

NSAutoreleasePool

NSOperationQueue

希望,这会对你有帮助..

答案 1 :(得分:2)

您可以在Apple开发文档中轻松找到它:

NSAutoreleasePool

  

NSAutoreleasePool类用于支持Cocoa   引用计数的内存管理系统。自动释放池存储   池本身发送时发送消息的对象   倒掉。

NSOperationQueue

  

NSOperationQueue类规定了一组的执行   NSOperation个对象。添加到队列后,进行操作   保留在该队列中,直到明确取消或完成   执行任务。队列中的操作(但还没有   执行)是根据优先级和自己组织的   操作间对象依赖性并相应地执行。一个   应用程序可以创建多个操作队列并提交操作   他们中的任何一个。