grand-central-dispatch - ios如何从队列分配队列中删除排队块?

  显示原文与译文双语对照的内容

我正在计划调度将处理更新操作的排队块。 主要目标是更新( 联机用户表。) 对象的最小数量( 用户界面更新请求) 。 ( 服务器有时会rain大量的更新,yay ) !

为了简单的主要场景是

  • dispatch_queue_t实例( 将处理给定用户界面更新块的队列) 是一个串行调度队列( private 调度队列)

  • 操作( 用户界面更新块) 与dispatch_after一起调度( 而不是每个数据集更新更新) 。

  • 如果数据集更新,检查是否已经存在已经安排的事件。 如果是,从dispatch_queue_t实例中 unschedule 。 然后调度同一块的时间延迟。

还有;

t 是一个很小的时间间隔,用户( 如 500 ms 。) 可能不会注意到任何其他方法。

我背后的动机

我通过( post & removeCallbacks与Runnable实例的组合)的处理器应用同样的逻辑,希望我能在iOS上实现同样的。

编辑:

由于 @Sven 建议使用NSOperationQueue更适合于场景,因为它们支持取消每个 NSOperation 。 我浏览了一下文件,发现

取消操作一旦添加到操作队列,操作对象有效地由队列所有,无法删除。 取消行动的唯一方法就是取消它。 通过调用cancel方法可以取消单个单个操作对象,或者通过调用队列对象的cancelAllOperations方法取消队列中的所有操作对象。

只有当你确定不再需要它们时,才应该取消操作。 发出取消命令将操作对象放入"已经取消"状态,这样就可以防止它被运行。 由于取消操作仍然被认为是"已经完成",依赖它的对象会收到适当的KVO通知,以清除依赖项。 因这里,取消所有排队操作以响应某些重要事件,例如退出或者特别请求取消的用户。

时间: 原作者:

你不能删除或者更改在调度队列上排队的操作。 尝试使用更高级 NSOperationQueue 来支持取消。

原作者:
...