私はCocoaで簡単なダウンロードマネージャを書いています。実際にはNSURLDownload
を使ってこのトリックを行います。問題は、NSURLDownload
が1つのセグメントからファイルをダウンロードしていると思います。ダウンロードパフォーマンスを向上させるために、他のダウンロードマネージャが多くのセグメントのファイルをダウンロードしていることがわかりました。Cocoa APIを使用してダウンロードを加速するには
実際、私はダウンロードしたいファイルを複数のセグメントに分割し、同時にこれらのセグメントをすべてダウンロードする必要があると思います。
問題は、私がそれを行う方法を知らないということです。私はすでに何も成功せずにインターネットでたくさん検索します。
編集:ここでは実用的なソリューションがあるおかげnacho4dヘルプ:
NSURL *downloadURL = [NSURL URLWithString:@"http://www.urltodownload.com"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:downloadURL cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 1000.0];
int fromByte = 0;
int toByte = 1000;
NSString *range = [NSString stringWithFormat:@"bytes=%i-%i", fromByte, toByte];
[request setValue:range forHTTPHeaderField:@"Range"];
[[NSURLDownload alloc] initWithRequest:request delegate:self];
ありがとうございました。実際には、範囲をNSMutableURLRequestオブジェクトで指定することは可能です。ここに小さな例があります: 'NSURL * downloadURL = [NSURL URLWithString:@" http://www.urltodownload.com "]; NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:downloadURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:1000.0]; int fromByte = 0; int toByte = 1000; NSString * range = [NSString stringWithFormat:@ "bytes =%i-%i"、fromByte、toByte];; [setValueを要求してください:HTTPHeaderFieldの範囲:@ "Range"]; [[NSURLDownload alloc] initWithRequest:デリゲートを要求する:self]; ' –
これで動作します。ありがとうございました。私はあなたのために別の質問をしていますが、同じ時間にn個のスレッドでファイルを書き込む最良の方法は何と思いますか? –
いくつかのオプションがありますが、最も簡単なのは、forループを使用してすべてのNSURLDownloadsを開始し、すべての代理人がNSDataを使用してすべてのパーツをまとめたと言ったときです。 (私は思うすべてをまとめる最良の方法があるはずです:)。 – nacho4d