【问题标题】:What is the difference between NSOperationQueue and NSAutoReleasePoolNSOperationQueue 和 NSAutoReleasePool 有什么区别
【发布时间】:2012-04-24 06:50:50
【问题描述】:

谁能给我描述一下NSOperationQueueNSAutoReleasePool之间的完美区别

【问题讨论】:

  • 它们的存在是为了解决完全不同的问题。自行车和电视机之间的完美区别是什么?

标签: iphone nsoperationqueue nsautoreleasepool


【解决方案1】:

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

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

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

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

更多请访问以下指南...

NSAutoreleasePool

NSOperationQueue

希望对你有所帮助..

【讨论】:

    【解决方案2】:

    您可以在 Apple 开发文档中轻松找到此内容:

    NSAutoreleasePool

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

    NSOperationQueue

    NSOperationQueue 类管理一组 NSOperation 对象。加入队列后,一个操作 保留在该队列中,直到它被明确取消或完成 执行其任务。队列内的操作(​​但还没有 执行)本身是根据优先级进行组织的,并且 互操作对象依赖关系并相应地执行。一个 应用程序可以创建多个操作队列并提交操作 对他们中的任何一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-09
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      相关资源
      最近更新 更多