3

私のアプリは、企業の評価に関してかなり複雑な計算を実行します。複数のソースから生データをフェッチします (たとえば、csv データとして格納された Web サービスからの株価と xml データとしての基礎データ)。

データをフェッチした後、アプリはデータを解析し、Core Data に保存して計算を実行します。計算結果もコアデータに格納されます。

私の現在のアプローチは、Company (マネージド) オブジェクトに計算をカテゴリとして追加し、csv および xml データの解析をカテゴリとしてデータ オブジェクトに追加することです (画像には表示されていません)。ネットワーク関連のコードは、別のシングルトン オブジェクトにあります (本で提案されているように: iOS Programming: The Big Nerd Ranch Guide, 3rd Edition)。

問題:

ネットワーク通信と計算は相互に依存しているため (つまり、特定のデータ パッケージを受信した後にのみ開始できる計算もあります)、マルチスレッドを使用したいので、View Controller にかなりの量のコードを作成することになりました。

メディエーター パターンのアイデアに従ってコーディネーター オブジェクトを使用し、View Controller をコーディネーション関連のコードから解放する必要があると思います。

これについてどう思いますか?

  • あなたの見解では、メディエーター パターン (コーディネーター オブジェクト) は正しいアプローチでしょうか?
  • コーディネーター オブジェクトをどのように設定することをお勧めしますか?
  • Web や書籍で、このテーマに関する優れたチュートリアルやサンプルはありますか?

ありがとうございました!

4

1 に答える 1

1

iOS は、NSOperations と Grand Central Dispatch という 2 つの優れたテクノロジを提供しています。何かが完了するまで何かが開始されないように、操作間の接続を非常に簡単に作成できるため、あなたが説明していることに対して操作を使用する方が快適です。NSOperation キューは OS と連携して動作するため、デバイスと現在のリソースのスレッド数と一般的な負荷が管理されます。

github にはオープン ソース プロジェクト「NSOperation-WebFetches-MadeEasy」があり、プライマリ クラス (この場合はビュー コントローラーですが、任意のクラス) でインスタンス化するメディエーター オブジェクトがあり、それを介してすべての操作を実行します。であり、mainThread でクラス内の 1 つのメソッドにメッセージが返されます。これは 15 分で開始できます。必要なクラスは OperationsRunner で、それを .h ファイルに追加する方法を教えてくれます。これは、Web フェッチ (同時 NSOperations) と非同時操作の両方に使用できます。ブロック操作もできるようになりました。

Apple のConcurrent Programming Guideで NSOperations とブロックについて読んでください。

于 2012-07-20T17:52:19.047 に答える