在我的应用程序中,我有一堆不同的图像包可供下载。这些图像从我的网站上逐一下载。这些包包含100-1500个图像,每个图像大约100KB-200KB。iOS/iPad上的内存问题帮助
下载图像时,我有一种方法可以选择要下载的图像,然后我有第二种方法根据主方法发送的参数进行实际下载。下面是下载方法的代码:
-(BOOL) downloadImageName:(NSString *)imageName ImageGroup:(NSString *)imageGroup AndRow:(int)row {
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSURL *downloadURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.website.com/%@_0001.jpg",imageName]];
NSData *data = [NSData dataWithContentsOfURL:downloadURL];
NSString *savePath = [NSString stringWithFormat:@"%@/%@^%@_%@.jpg",docsPath,currentServerCycle,imageGroup,imageName];
BOOL downloaded = [data writeToFile:savePath atomically:YES];
if (downloaded)
return YES;
}
else {
return NO;
}
}
我遇到的问题是这样的:
当我与性能工具望着分配我看到该应用程序是保持mallocs运行这个(NSConcreteData )每次下载图像时,只有在主方法(调用此下载方法的那个方法)完成时才释放它们。这对于较小的图像包来说很好,但是在我的总分配达到300 + MB(我的应用程序的正常分配量约为3mb)之后,较大的分配显然会崩溃。
它们没有泄漏,因为一旦图像包下载并且方法结束,所有的malloc都不见了。
我试过手动分配和释放NSData *数据,但它没有效果。
非常感谢!我从来没有在一个方法上使用过自动释放池,我之前并不打算在单独的线程中使用它。并感谢您指出命名错误。 – Brodie 2010-09-17 23:50:25