Webサービスリクエストを介してバイトデータを受信し、それをiOSデバイス上のファイルに書き込みたいという状況があります。以前は、すべてのデータ(データの最後まで)をメモリ変数に追加し、最後にNSStream
次の方法を使用してiOSデバイスのファイルにデータを書き込みていました。
stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent
小さなサイズのデータでは問題なく動作しますが、問題は、Webサービスを介してデータを受信している場合、それが大きなチャンク(数MB)になる可能性があり、ファイルに書き込むためにすべてをメモリに収集したくないことです。効率的にNSFileHandle
する小さなチャンクサイズのデータを同じファイルに数回書き込むように切り替える必要があると思います。今私の質問は、これを行うための最良のアプローチは何ですか?つまり、バックグラウンドでファイルに書き込むにはどうすればよいNSFileHandle
ですか?私は次のようなコードを使用します:
- (void) setUpAsynchronousContentSave:(NSData *) data {
NSString *newFilePath = [NSHomeDirectory() stringByAppendingPathComponent:@"/Documents/MyFile.xml"];
if(![[NSFileManager defaultManager] fileExistsAtPath:newFilePath ]) {
[[NSFileManager defaultManager] createFileAtPath:newFilePath contents:nil attributes:nil];
}
if(!fileHandle_writer) {
fileHandle_writer = [NSFileHandle fileHandleForWritingAtPath:newFilePath];
}
[fileHandle_writer seekToEndOfFile];
[fileHandle_writer writeData:data];
}
しかし、1〜2 Mbのデータサイズを上記のメソッドに渡す場合、バックグラウンドで実行する必要がありますか?参考までに、私はメインスレッドで書いています。