1

私はiOSにまったく慣れていないので、HTTP投稿/通信を取得するための最良の方法を試しています。

問題:

複数の API 呼び出しを行いたいのですが、各呼び出しには個別の応答があります。一般的なネットワーク ユーティリティを作成しようとしています。理想的には、API URL を受け取り、呼び出しを行い、呼び出し元にデータを返します。それを達成する正しい方法は何ですか?? 各アプローチについて、適度なレベルの議論とファンが見つかりました。

オプション1:

 dispatch_async(aQueue,^{
    ...[ make a sync network request get data back]
    --- perform operation on data 
   --- then pass proceed data UI or set it in model. 

   dispatch_async(dispatch_get_main_queue()
  }

オプション 2:

 -(NSString *) postData:(NSDictionary *)data serverUrl:(NSString *)targetUrl
   -- call post data method with seperate delegate for each caller 
   -- start async request 
   -- on DidFinishedLaunching or OnError check delegate & then 
      return response back to callback 

ご意見ありがとうございます。

4

2 に答える 2

1

AFNetworkingと呼ばれる、実装が非常に簡単な素晴らしいライブラリーが利用可能です。

これは、クラス間のデータ通信を非常に単純化する (デリゲートを排除する) ブロックを使用し、非同期です。

使用例は次のとおりです。

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:"www.yourwebsite.com/api"]];

NSDictionary *params = @{
    @"position": [NSString stringWithFormat:@"%g", position]
};

[client postPath:@"/api" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

}];

それと同じくらい簡単です!結果は、HTTP Post または Get メソッドを呼び出すクラス内で直接利用できます。

画像と JSON のリクエスト、JSON の逆シリアル化、進行中のコールバックを伴うファイルのダウンロードなども含まれます。

于 2012-12-18T23:03:27.390 に答える
1

あなたの最初の選択肢は良くないと思います。プールされたスレッドが長時間ブロックされるため、お勧めできません。マルチスレッドを環境に実装する場合、システムが提供するプールされたスレッドを長時間実行するプロセスに使用しないでください。2 番目の同期ネットワーク呼び出しは、実際にはお勧めできません。また、独自の落とし穴があります。

2番目のオプションはより実行可能です。あなたができるかもしれない改善は、GCD スレッドへの起動が完了したときに発生する作業を実行し、処理後にメインスレッドでデータを送信することです。

于 2012-12-18T23:32:32.280 に答える