我在iOS 7及更高版本上有一个使用NSURLSession
下载文件的应用。我开始这样的任务:
//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中修复。耶!
答案 0 :(得分:0)
同样的行为发生在我身上。当内存耗尽时,它通过硬崩溃表现出来。对于其他任何好奇的人,如果他们看到同样的问题,请按照以下步骤操作......
这对你来说是一个非常好的观察。我从来没有想过要研究这条道路。谢谢!