1

サーバーからデータをダウンロードするための多くの構造があります。お気に入り

  1. ViewDidLoad NSURLConnection を作成し、そのデリゲートを呼び出し、接続が終了したら、パーサーとパーサー データを作成し、DB に保存します。(全員同じクラス)

別の方法は

  1. すべての NSURLConnections + NSXMLParser を管理する別のクラスを作成し、ViewDidLoadまたはViewController クラスの他のメソッドでそのクラスのオブジェクトを作成します。

別の方法は

  1. 接続を設定するファイルを作成し、パーサーを管理するファイルをもう 1 つ作成します。

     ViewController =====================>> URLConnection
     Delegate of URLConnectionfile =====================>> ViewController 
    

次に、このデリゲートでは、サーバーからダウンロードされた NSData がさらに Parser クラスに送信されます

   ViewController =======================>> ParserClass
  Delegate of Parser gives Array to ================= ViewController

次に、その配列を表示します

別の方法は、スレッドを使用することです

  1. そのようなメソッドを呼び出す

    [self performSelectorInBackground:@selector(doSomething) withObject:nil];

次にdoSomethingで、接続ファイルを呼び出します

管理が容易になり、ビューのハングが発生しないように、非常に整理された適切な方法でダウンロードして保存するための最良の方法を誰でも定義できますか?

4

3 に答える 3

1

iOS4+ から Apple は GCD を導入しました。同時実行プログラミング ガイド: ディスパッチ キューを参照してください。

これはおそらく、非同期処理 (特に Web コール) を実行するための最良かつ最も推奨される方法です。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{

    NSHTTPURLResponse *response = nil;
    NSError *error = nil;
    NSData *responseData = nil;

    NSDictionary *responseDictionary = nil;
    responseData = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60] returningResponse:&response error:&error];

    //Update the UI after this
    dispatch_async(dispatch_get_main_queue(), ^{
        [self updateUIAfterParsing]; 
    });

});
于 2013-09-25T11:14:02.273 に答える
1

メインスレッドでダウンロードおよび解析コードを操作しないでください。これが、UI のフリーズを回避する唯一の方法です。

おすすめの方法、

  1. NSOperationNSOperationQueue
  2. GCD
  3. などAFNetworkingのサードパーティ フレームワークを使用します。MKNetworkKit

また、テーブル ビューに画像がある場合は、遅延読み込みと呼ばれる手法を使用します。

使用しないことをお勧めします[self performSelectorInBackground:@selector(doSomething) withObject:nil];。使い方がわからない場合は面倒です。GCD を使用してください。


編集

通常、私が従うことは、

  • NSOperationandを使用して Web サービス呼び出しを処理する Web サービス エンジン クラスNSOperationQueue(GCD または他のフレームワークを使用できます)。WS を呼び出すすべてのビュー コントローラーは、このクラスと通信します。
  • パーサー クラスは、Web サービス エンジンから WS 応答を受け取ります。応答を解析し、モデル クラスを作成します。完了すると、解析された応答が Web サービス エンジンに委譲され、ここからビュー コントローラーに委譲されます。
  • エラー処理と進行状況の表示は、Web サービス エンジンで処理されます。
  • 重要: ビュー コントローラからリクエストが行われるポイントでは、によって作成されたバックグラウンド スレッドで処理が行われNSOperationQueueます。したがって、UI をフリーズしません。

WS への呼び出しは で開始されviewDidLoad、プロセスが完了するまで進行状況インジケータが表示されます。ただし、場合によっては、WS 応答がダウンロードされるまでビュー コントローラーを作成しないという要件があります。したがって、リクエストを開始する選択は、要件に基づいています。

于 2013-09-25T11:03:26.193 に答える