3

iOS では、アプリケーションは約 400MB の zip ファイルをダウンロードしています。ファイルのダウンロード中に断続的にクラッシュします。

現在、[NSFileHandle writeData:] を使用して、データが入ってくると書き込みますが、メモリに保存されていません。しかし、オペレーティングシステムが何らかの形でそれをメモリに保存しているのだろうか?

NSOutputStream は、大きなファイルをダウンロードするためのより良いソリューションでしょうか? または、おそらく標準の UNIX ファイル記述子ですか?

ファイルハンドルは次のように設定されています。

NSFileManager * fileManager = [NSFileManager defaultManager];
[fileManager createFileAtPath:tmpFilePath.path contents:nil attributes:nil]; 
_zipFile = [NSFileHandle fileHandleForWritingAtPath:tmpFilePath.path];

現在、私の NSURLConnection デリゲート メソッドは次のようになっています。

- (void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) data {
   [_zipFile writeData:data];
}

そのため、リクエストからのデータは保存されず、他のデータ オブジェクトに追加されません。これはディスクに書き込むだけで、メモリに影響を与えるべきではありませんか?

ありがとう

4

1 に答える 1

4

の使用に問題はないと思いますNSFileHandle。私は常に を使用していたことを告白しますが、両方の方法 (および)NSOutputStreamを試しただけで、消費されるメモリの点でどちらもかなり尊重されているようです。40 MB のファイルをダウンロードすると、ダウンロードの開始時に割り当てが 3 MB に急増しましたが、すぐに 1 MB で横ばいになりました)。NSFileHandleNSOutputStream

割り当てとリーク

したがって、「割り当て」と「リーク」(「リーク」を選択した場合は両方を取得) でアプリを実行し、どのように見えるかを確認します。

まだ行っていない場合は、コードを静的アナライザー ([製品] メニューの [分析]) で実行して、問題がないことを確認してください。(そこにはきれいな健康状態があるはずです。問題が報告された場合は、それらを修正する必要があります。) また、ゾンビがオフになっていることを確認します (リリースされたすべてのオブジェクトを追跡する過程で、ゾンビオブジェクトを作成します...小さいですが、メモリを消費します。

于 2013-06-29T01:50:17.043 に答える