NSOperationsQueue:管理相同的请求

时间:2016-08-27 22:44:31

标签: ios swift nsurlsession nsoperation nsoperationqueue

在以下情况下我需要点击endpoint

  1. 当视图重新出现在屏幕viewWillAppear上时。
  2. 在视图控制器的生命周期中每隔5秒(在显示视图时)。
  3. 应用从background返回foreground后。
  4. 当我的应用返回concurrent时,这会向同一个endpoint创建至少2个(如果不是3个)foreground个请求,尤其是在慢速互联网连接期间。

    我知道我可以将concurrentQueue次请求的数量限制为1,但有时我确实需要点击几个不同的endpoints concurrently所以我希望找到另一种选择。

    我正在使用NSURLSessionNSOperationsQueue进行这些调用。是否有最佳做法来处理NSOperationsQueue

1 个答案:

答案 0 :(得分:1)

可以将同一任务的NSOperation子类合并在一起,从而删除任何冗余网络调用。为了做到这一点,每个操作都需要具有任务唯一的identifier(不是操作本身),并且可以用于确定该操作是否在队列中。一旦确定一个操作在队列中,我们就可以采用新操作的块/闭包回调并将其插入到较旧的操作结构中,以确保在旧操作的任务完成时,两个回调都被触发。这有助于避免您的应用中缺少回调的情况。

我写了一篇涵盖这个话题的文章:

http://williamboles.me/removing-bolierplate-when-coalescing-nsoperations/

请注意,这仅适用于仍在队列中的操作,如果您想根据时间间隔限制操作,则需要扩展您的"流量控制器",如&#34 ;代码不同"评论