NSURLSession
iOS 7 以降を使用してファイルをダウンロードするアプリがあります。次のようにタスクを開始します。
//property declared: @property (retain) NSURLSession *session;
NSString *addr = @"http://www.example.com/path/to/nontrivial/file.dat";
NSURL *url = [NSURL URLWithString:addr];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
self.session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
[[self.session downloadTaskWithRequest:request] resume];
完了ハンドラー ( URLSession:downloadTask:didFinishDownloadingToURL:
) で、ファイルをアプリケーション データ フォルダーに移動invalidateAndCancel
し、セッションで呼び出します。プログレス ハンドラー ( didWriteData:totalBytesWritten:totalBytesExpectedToWrite:
) では、進行状況をログに記録するだけです。
これがデバッグで実行されると、メモリ使用量が急速に増加し、ダウンロードされたデータ量の数倍になります。ただし、バックグラウンド タスクで実行すると、メモリ使用量は一定になります。
ダウンロード タスクで既定のセッション構成を使用するのはよくありませんか? 設定すべきキャッシュ プロパティはありますか? 何が起きてる?
更新:私が知る限り、これはデバッガーが接続されている場合にのみ発生します。デバッガーを使用せずにシミュレーターで起動すると、アクティビティ モニターでメモリ使用量の増加が見られません。
更新 2:これは iOS 8.3 で修正されたようです。わーい!