【发布时间】:2011-04-13 23:16:42
【问题描述】:
在我的应用程序中,我有许多不同的图像包可供下载。图片是从我的网站上一一下载的。这些包包含 100-1500 张图片,每张图片大小约为 100KB-200KB。
下载图像时,我有一个方法可以选择要下载的图像,然后我有第二种方法,它根据从主方法发送的参数进行实际下载。下面是下载方法的代码:
-(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;
}
}
我遇到的问题是这样的:
当我使用查看分配的性能工具运行此程序时,我看到应用程序在每次下载图像时都保留 malloc (NSConcreteData),并且仅在主方法(调用此下载方法的方法)完成时才释放它们。这对于较小的图像包来说很好,但是在我的总分配量达到 300+MB 之后,较大的图像包显然会崩溃(我的应用程序中的正常分配量约为 3mb)。
它们没有泄漏,因为一旦下载了图像包并且方法结束,所有的 malloc 都消失了。
我已经尝试手动分配和释放 NSData *data 但它没有效果。
【问题讨论】:
标签: iphone memory ipad memory-management nsdata