我的图像从数据服务器加载消耗了大量内存,如果图像增加,一旦我移动到前一个屏幕,即使我没有使用“alloc”,使用过的图像内存仍然消耗。如果一旦离开屏幕,是否可以清除缓存。有什么最好的方法可以避免吗?
for (unsigned i = 0 ; i<displayedImages.count; i++)
{
if (![operation isCancelled])
{
NSLog(@"loadImage %d",i);
NSString *strURL = [[[imageList objectAtIndex:i] objectForKey:@"URL"] stringByAddingPercentEscapesUsingEncoding:4];
NSURL *url = [NSURL URLWithString:strURL];
NSData *imageData = [NSData dataWithContentsOfURL:url];// [[NSData alloc] initWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:imageData];// [[UIImage alloc] initWithData:imageData];
indexForSetImage = i;
[self performSelectorOnMainThread:@selector(displayImage:) withObject:image waitUntilDone:NO];
}
}
非常感谢任何建议。
此致
Sathish所在
答案 0 :(得分:0)
您需要使用Lazy Loading代码作为解决问题的方法。
在此示例中,他们使用的是Table视图,但是您不应使用tableview,而应使用触摸事件或下一个图像的任何按钮,当按下该按钮时,将下载图像然后显示。
是的如果您将尝试使用for循环加载所有图像,它将花费很多时间,因为它可能会消耗大量内存并可能导致应用程序崩溃。
希望这会对你有所帮助。
答案 1 :(得分:0)
需要延迟加载,管理内存的方法是确保不将资源保存到您不需要的内容。
因此,一旦图像不在视野中,您就不能保持对它的引用。因此,例如有一个UIImageView * temp,你不再显示它,你必须这样做:
temp.image = nil;
这可以确保您不持有它。如果您需要更多帮助,请查看this。它还内置了一些缓存,因此您无需为此烦恼