2012-07-20 23 views
3

我的應用程序執行一些相當複雜的公司估值計算。 它從多個來源提取原始數據(例如,將來自作爲csv數據存儲的Web服務的價格和基本數據的價格作爲xml數據進行分享)。Objective-C中的調解器模式:控制器對象來執行計算等。

獲取數據後,應用程序解析在覈心數據中的數據,將其存儲和執行計算。計算結果也存儲在覈心數據中。

我目前的做法是將計算添加爲公司(託管)對象的類別,並將csv和xml數據解析爲添加到數據對象(圖中未顯示)的類別。與網絡相關的代碼位於單獨的單例對象中(如書中所述:iOS編程:The Big Nerd Ranch Guide,第3版)。

問題:

隨着網絡通信和計算是相互依存(即一些計算可以啓動一個特定的數據包已經被接收後,才),我想使用多線程,我結束了視圖控制器中有相當多的代碼。

我相信我應該使用協調對象以下從協調相關的代碼的調解模式和自由我的視圖控制器的想法。

你對此有何看法?

  • 中介模式(協調對象)在您的視圖中是正確的方法 ?
  • 你會如何建議設立協調 對象?
  • 是否有在一本書在網絡或 關於這個問題的任何好的教程或樣品?

謝謝!

回答

1

的iOS提供了這兩個偉大的技術 - NSOperations和大中央調度。我更願意使用操作來描述你所描述的內容,因爲它很容易在操作之間建立連接,從而在某些事情完成之前不會啓動。 NSOperation隊列與OS協同工作,以便爲設備和當前資源管理線程數量和一般負載。

在github上有一個開源項目「NSOperation-WebFetches-MadeEasy」,它有一箇中介對象,可以在你的主類中實例化(在本例中爲viewController,但可以是任何類),然後運行通過它的所有操作,並且它將mainThread返回給你的類中的一個方法。您可以在15分鐘內完成此任務 - 您需要的課程是OperationsRunner,它會告訴您如何將其添加到.h文件中。您可以將它用於Web抓取(併發NSOperations)和非併發操作。你現在甚至可以進行塊操作。

在閱讀上NSOperations並阻止蘋果的Concurrent Programming Guide

+0

謝謝你提醒我的GCD。我重新編寫了使用GCD的應用程序的部分內容,現在看起來工作正常。我沒有找到你提到的開源項目,你有一個URL? – AlexR 2012-07-24 12:03:14

+1

滑稽 - 谷歌沒有找到它 - 網址 - > https://github.com/dhoerl/NSOperation-WebFetches-MadeEasy – 2012-07-24 12:10:40