Webサーバーからファイルをダウンロードしたいココアアプリケーションを書いています。これを行うための最も便利な方法は何ですか?NSSocketsまたはNSUrlRequestに参加する必要がありますか?または、これを達成するための他の簡単な方法はありますか?
6 に答える
ファイルの内容をメモリにロードする場合、NSString、NSData、さらにはNSDictionaryなどのCocoaデータクラスの多くにはinitWithURL:
、Webリクエストの内容で直接初期化するメソッドがあります。それらは非常に使いやすいですが、あまり柔軟ではなく、優れたエラー処理を提供しません。NSURLConnectionは、必要に応じてデータをロードするためのより柔軟な方法を提供します。
ファイルをディスクに直接ダウンロードする場合は、NSURLDownloadが最適です。
警告: initWithURL: メソッドはブロックされています。これは、ファイルが大きい、サーバーが遅い、ユーザーのインターネット接続が遅いなどの場合に大きな問題となります。メイン スレッドから呼び出さないでください。
また、進行状況のレポートも得られないため、ダウンロードが遅い場合、ユーザーに進行状況や所要時間を伝える方法がありません。
ほとんどの場合、代わりに NSURLDownload または NSURLConnection を使用する必要があります。
最も簡単な方法は、おそらくNSURLDownloadとNSURLRequestを使用することです。
NSURLConnection は最も細分性が高くなりますが、NSURLConnection の sendSynchronousRequest() メソッドには注意してください。 毎回メモリリークが発生し (XCode Leak Instrumentation ツールをアタッチして実行し、それを自分自身で証明しました)、理由もなく奇妙な HTTP 204 応答を返すことがあります。 私はこれについてここにブログを書きました
もう 1 つの方法は、OS X システムにプリインストールされている libcurl を使用することです。ただし、このアプローチを使用する場合は、プロキシなどのシステム設定が尊重されていることを確認してください。