我有一个应用程序可以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:
) 中,我只记录进度。
当它在调试中运行时,内存使用量会迅速增加,达到已下载数据量的几倍。但是,如果我在后台任务中执行此操作,则内存使用量是恒定的。
将默认会话配置与下载任务一起使用是不是很糟糕?我应该设置某种缓存属性吗?这里发生了什么?
更新:据我所知,这仅在附加调试器时发生。当我在没有调试器的模拟器中启动它时,我在 Activity Monitor 中看不到任何内存使用量增加。
更新 2:这似乎已在 iOS 8.3 中修复。耶!