2

私は自分の iOS アプリに取り組んでいました。私の目標は、インターネットから受信したファイルを少しずつ保存することです。私の現在の設定では、NSMutableDataオブジェクトがあり、ファイルを受け取るときにそれに少しのデータを追加します。最後の「パケット」が受信された後NSData、ファイルに書き込み、プロセスは完了します。モバイル デバイスの RAM には制限があり、大きなファイルを受信すると問題が発生するため、これが理想的な方法ではないのではないかと心配しています。

次に考えたのはNSFileHandle、ファイルが到着すると、仮想メモリではなくディスクに保存されるように を実装することでした。

速度と効率の点で、iOS デバイスで適切に機能するのはどの方法だと思いますか。私は現在、最初のNSMutableDataアプローチを使用しています。を使用するようにアプリを変更する価値はありNSFileHandleますか?

前もってありがとう、Guvvy

4

3 に答える 3

1

ダウンロードするデータに制限がない (つまり、最大ファイル サイズがない) 場合は、ダウンロードと保存のスキームにコードを挿入して、" " オブジェクトから " NSMutableData" オブジェクトにデータをフラッシュする価値があります。特定の転換点 (2K、10K、1Meg など) でファイルを作成します。そして、メモリ内のデータ オブジェクトが再びいっぱいになったときに、そのファイルに追加します。

iDevice には物理ハード ドライブがないため (つまり、回転するプラッターを意味し、余分な電力が回転ヘッドと読み取り/書き込みヘッドを起動するために引き出されます)、それらのバイトを書き込むだけの価値があるかもしれません。すぐにファイルハンドルに直行します。消費電力の点で余分な費用がかかるとは思いません。消費電力が大きいのはネットワーク通信です (セルラー通信は消費電力が大きく、WiFi 接続は消費電力がやや少ない)。

于 2012-06-07T22:40:22.330 に答える
0

AFNetworking とそのStreaming Requestを使用してみてください:

NSURL *url = aUrl;
NSString *path = aPath;
NSURLRequest *request = [NSURLRequest requestWithURL:url];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:YES];
[operation start];
于 2012-06-07T23:05:40.427 に答える
0

ダウンロードするファイルのサイズによって異なります。ファイルをすぐに使用する場合は、最初のオプションが最適です。最初に RAM に保存してからディスクに保存し、次にすべてを RAM に再度ロードするように見えます。ただし、ファイルが非常に大きい場合は、iPhone がバックグラウンドで処理できるように使用する場合でも、ディスクに保存する価値があります。主にあなた次第です。いくつかのテストを実行して、アプリを使用したときにどのように感じるかを確認してください.

于 2012-06-07T22:41:16.360 に答える