iOS:处理重叠的后台请求

时间:2011-05-27 20:43:33

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

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

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

1 个答案:

答案 0 :(得分:1)

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

示例:您不希望将图像大小调整操作添加到同一队列,并从Web获取一些不相关的Feed,特别是如果它们之间不存在任何关系。或许你这样做是因为两者都需要大量内存,因此无法并行运行。

但您可能希望将Web图像搜索操作添加到同一队列,同时取消之前添加到此队列的相同类型的操作。这些图像搜索操作中的每一个都可以初始化图像大小调整操作并将其放入其他队列中。现在你有了一个关系,除了图像搜索操作之外还必须取消调整大小。如果图像搜索操作比相关的调整大小操作花费的时间更长怎你如何保留它的参考或知道什么时候完成?

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