0

HTTP または HTTPS を介して RESTful サービスと通信する必要があります。NSURLConnectionクラスを使用して非同期リクエストを実行する例をいくつか読んでいますが、メソッドを使用するものもあればsendAsynchronousRequest:queue:completionHandler:、メソッドを使用してconnectionWithRequest:delegate:メソッドを実装するものもありNSURLConnectionDelegateます。違いが実装のみでパフォーマンスと結果が同じである場合、またはアプローチの1つが他のアプローチよりも優れているか、より正確である場合、これらのアプローチのそれぞれがどのような意味を持つかを明確にすることはできません...

ありがとう!

4

1 に答える 1

0

通常、鍵となる 2 つの違いがあります。

  • まず、両方のメソッドの戻り値の型です。[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]戻り値の型がvoidあり、たとえばプロパティで NSURLConnection をキャプチャできないことを意味するため、それをかなり制御できなくなります。つまり、できません [NSURLConnection cancel]。一方、 [NSURLConnection connectionWithRequest:delegate:] は接続を返すため、完全な制御を保持できます。
  • 次に、大きなファイルをダウンロードする場合、ブロック ベースの方法ではデータがメモリにロードされ、ブロックの実行時に「配信」されます。小さな RESTful な回答を想定すると、これで問題ないかもしれません。ただし、大きなファイルをダウンロードする場合は、着信データを直接ファイル ハンドルに書き込んで、メモリ消費を減らすことができます。このためには、デリゲート メソッドが必要です [NSURLConnectionDataDelegate connection:didReceiveData:]。残念ながら、 NSURLConnectionDataDelegateのドキュメントは、現在の Apple のドキュメントでは簡単にリンクされていません。自分自身を NSURLConnection のデリゲートに設定すると、それらのメソッドが呼び出されます。

お役に立てれば。

于 2013-07-14T10:49:13.150 に答える