我正在开发一款应用程序,用于下载资源并将它们写入磁盘供以后脱机使用,并且它始终是自定义内容。目前我们正在处理大约4000张JPG的内容。用户初始化内容到iPad上的下载,并且在用户界面中有一个进度条,所以用户基本上一直等到它完成。问题在于大约分配了180 - 190 MB的内存,它崩溃了。如何处理几千个NSURLConnection请求,下载图像并保持内存使用率下降
我在仪器看到那是什么CFData(店)是主要的罪魁祸首,我的理解是,CFData(店)是NSURLConnection的请求缓存。
我已经试过:
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];
和
[[NSURLCache sharedURLCache] removeAllCachedResponses];
以及设置缓存政策,没有任何改善。
以供参考,这是我的POST请求的样子:
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *contentType = [NSString stringWithFormat:@"text/xml"];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[xmlMessage dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postBody];
//get response
NSHTTPURLResponse* urlResponse = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&httpError];
任何帮助将用热烈的掌声来满足。
你使用辅助线程来做到这一点吗? – Jim 2012-02-23 17:44:24
另外,你有一个大概的想法,你有多少MB预计下载?我想知道这与你给出的190 MB数字相比如何。 – Jim 2012-02-23 17:45:25
@Jim不,不是辅助线程。在这些请求正在进行时,进度条正在主线程上更新。根据总大小,从查看我的模拟器中的文档文件夹,大约300 - 400 MB。 – SnareHanger 2012-02-23 18:12:54