1

谁能给我描述和之间的完美NSOperationQueue区别NSAutoReleasePool

4

2 回答 2

6

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

操作间的依赖关系为操作提供了绝对的执行顺序,即使这些操作位于不同的操作队列中。直到其所有相关操作都完成执行后,才认为操作对象已准备好执行。对于准备好执行的操作,操作队列总是执行相对于其他准备好的操作具有最高优先级的操作。

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

您使用通常的 alloc 和 init 消息创建一个 NSAutoreleasePool 对象,并使用 drain(或 release)处理它 - 要了解差异,请参阅“<a href="https://developer.apple.com/library/mac/#documentation /Cocoa/Reference/Foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html#//apple_ref/doc/uid/20000051-SW5" rel="nofollow">垃圾收集")。由于您无法保留自动释放池(或自动释放它 - 请参阅保留和自动释放),因此耗尽池最终会产生释放它的效果。您应该始终在创建它的相同上下文(调用方法或函数,或循环体)中耗尽自动释放池。有关更多详细信息,请参阅自动释放池。

有关更多信息,请访问以下指南...

NSAutoreleasePool

NSOperationQueue

希望对你有帮助..

于 2012-04-24T07:04:02.440 回答
2

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

NSAutoreleasePool

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

NSOperationQueue

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

于 2012-04-24T07:04:17.917 回答