2011-05-27 19 views
2

在iOS應用程序,我在寫這將傳遞消息類,去做一個後臺請求(通過performSelectorInBackground:withObject:),然後通過委託方法返回的結果(即:將被顯示在地圖上)。當一次請求發生時,一切似乎都正常,但我試圖找出如何處理多個重疊的請求。例如,如果用戶在啓動一個後臺線程搜索框的東西,然後進入初始後臺線程之前別的事情完成後,應該怎麼來處理呢?的iOS:處理重疊的背景要求

有幾個選項(不要讓第二個請求開始,而首先是在進步,只要第二請求停止第一,讓兩者同時運行,並返回結果無關,等),但有沒有一種通用/推薦的方式來處理這個問題?

+0

我應該讀更詳細地說(順便說一下,評論中的鏈接是錯誤的)。但我的問題更多的是關於如何處理這種特殊情況,而不是使用派遣隊列,NSOperation等實際實現它的細節。 – jrdioko 2011-05-27 22:13:39

+0

哎呀,這裏是[正確的鏈接](http://developer.apple.com /library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/ConcurrencyandApplicationDesign/ConcurrencyandApplicationDesign.html%23//apple_ref/doc/uid/TP40008091-CH100-SW12)。 – Moshe 2011-05-27 23:15:53

回答

1

我不認爲有普遍的答案。我的建議是通過它們之間的功能和關係將任務(以NSOperations和/或塊的形式)分開。

舉例:你不想要的圖像調整操作添加到同一個隊列中取出由網絡一些零散的飼料,特別是如果他們之間沒有任何關係存在。或者,也許你這樣做是因爲兩者都需要大量的內存,並且因爲它不能並行運行。

但你可能要Web圖像搜索操作添加到同一個隊列,同時取消之前加入到這個隊列中的相同類型的操作。這些圖像搜索操作中的每一個都可能啓動圖像調整大小操作並將其放入其他隊列中。現在你有一種關係,除了圖像搜索操作之外,還必須取消調整大小。如果圖像搜索操作比相關的調整大小操作花費更多時間?你如何保留對它的引用或知道它何時完成?

呀,它就會很容易和遺憾,複雜的,如果我不給你,因爲每一種情況的獨特性,但使得它運行像到底瑞士時鐘的任何具體的答案是非常令人滿意:)