【问题标题】:iOS: Handling overlapping background requestsiOS:处理重叠的后台请求
【发布时间】:2011-05-27 20:43:33
【问题描述】:

在一个 iOS 应用程序中,我正在编写一个将收到消息的类,去做一个后台请求(通过performSelectorInBackground:withObject:),然后通过委托方法返回结果(然后将显示在地图上) .当一次发生一个请求时,一切似乎都正常,但我试图弄清楚如何处理多个重叠请求。例如,如果用户在启动后台线程的搜索框中输入了一些内容,然后在初始后台线程完成之前输入了其他内容,应该如何处理?

有几个选项(不要让第二个请求在第一个请求正在进行时开始,一旦请求第二个请求就停止第一个请求,让两者同时运行并返回独立的结果等),但是有一个常见的/推荐的方法来处理这个?

【问题讨论】:

  • 我应该更详细地阅读它(顺便说一下,您评论中的链接是错误的)。但我的问题更多是关于如何处理这种特殊情况,而不是使用调度队列、NSOperations 等实际实现它的细节。
  • 哎呀,这里是the correct link

标签: objective-c multithreading ios background thread-safety


【解决方案1】:

我认为对此没有通用的答案。我的建议是通过它们的功能和它们之间的关系来分离任务(以 NSOperations 和/或块的形式)。

示例:您不希望将图像调整大小操作添加到同一个队列,同时从 Web 获取一些不相关的提要,尤其是在它们之间不存在任何关系的情况下。或者,也许您这样做是因为两者都需要大量内存并且因此无法并行运行。

但您可能希望将网络图像搜索操作添加到同一个队列,同时取消之前添加到此队列的相同类型的操作。这些图像搜索操作中的每一个都可能会启动图像调整大小操作并将其放入其他队列中。现在您有了关系,除了图像搜索操作之外,还必须取消调整大小。如果图像搜索操作比关联的调整大小操作花费更长的时间怎么办?您如何保留对它的引用或知道它何时完成?

是的,如果我因为每种情况的独特性而没有给你任何具体的答案,这很容易变得复杂,很抱歉,但最终让它像瑞士时钟一样运行是非常令人满意的:)

【讨论】:

    猜你喜欢
    • 2020-04-13
    • 2015-06-17
    • 1970-01-01
    • 2020-11-06
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多