我有一种方法可以从互联网上下载许多图像,然后将它们保存到设备中。这是代码:
-(IBAction) updateImages {
for (x=0; x<[imagesToUpdate count]; x=x+1) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
NSMutableDictionary *tempDic = [dic objectForKey:[imagesToUpdate objectAtIndex:x]];
BOOL newDictionary = [self downloadChartForDictionary:tempDic];
[pool drain];
}
}
-(BOOL) downloadChartForDictionary:(NSMutableDictionary *)dictionary {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
NSMutableDictionary *updatedDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionary];
NSString *downloadString = [NSString stringWithFormat:@"http://www.photo.com/%@_0001.jpg",[updatedDictionary objectForKey:@"PDFName"]];
[updatedDictionary setObject:serverAIRAC forKey:@"airac"];
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"MM-dd-y";
NSString *dateString = [formatter stringFromDate:date];
[updatedDictionary setObject:dateString forKey:@"date"];
[formatter release];
NSURL *url = [NSURL URLWithString:downloadString];
NSData *data = [NSData dataWithContentsOfURL:url];
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSString *savePath = [NSString stringWithFormat:@"%@/%@^%@_%@.jpg",docsPath,serverAIRAC,[updatedDictionary objectForKey:@"airport"],[updatedDictionary objectForKey:@"PDFName"]];
BOOL downloaded = [data writeToFile:savePath atomically:YES];
[pool drain];
return YES;
}
我的问题是,当它运行时,NSData对象数据被分配但从未释放,即使updateImages方法完成也是如此。在仪器中,下载的每个图像都保持分配状态。随着每个图像的下载,总分配继续增加,并最终导致内存不足崩溃。但是,仪器不会报告与此对象相关的泄漏。
我试过:[[NSData alloc] initWithContentsOfURL:url]然后释放它,但这没有帮助。
我曾尝试将自动释放池仅放在updateImages方法中,并且仅在downloadChartForDictionary方法中使用,并且都没有帮助。
我整天都被困在这一天所以非常感谢任何帮助
答案 0 :(得分:0)
你试过[[[NSData alloc]initWithContentsOfURL:url] autorelease]
吗?这将把NSData对象放入当前的自动释放池中。简单的alloc / init创建仍然需要您的明确管理。
答案 1 :(得分:0)
尝试使用具有不同阅读选项的dataWithContentsOfURL:options:error:。我会从NSDataReadingUncached开始,因为听起来您的数据在您不希望的时候被缓存。
答案 2 :(得分:0)
这实际上是一个非问题...由于某种原因,工具报告了分配,但当我实际运行应用程序时,它从未崩溃。