UIImage缓存清除问题
Posted
技术标签:
【中文标题】UIImage缓存清除问题【英文标题】:UIImage cache clearing problem 【发布时间】:2011-03-21 10:47:44 【问题描述】:我的图像从数据服务器加载会消耗大量内存,如果图像增加并且一旦我移动到上一个屏幕,即使我没有使用“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];
非常感谢任何建议。
问候,
萨蒂什
【问题讨论】:
【参考方案1】:您需要使用Lazy Loading 代码作为您遇到的问题的解决方案。
在本例中,他们使用的是 Table view ,但您应该使用触摸事件或任何按钮来显示下一个图像,而不是使用 tableview,当按下该按钮时,应下载图像,然后将其显示。
是的,如果您尝试使用 for 循环加载所有图像,这将花费大量时间,并且可能会消耗大量内存并可能导致应用程序崩溃。
希望这会对你有所帮助。
【讨论】:
感谢 iphonefun 的回复。我试着回复你【参考方案2】:需要延迟加载,并且管理内存的方法是确保您不会将资源保留给您不需要的东西。
因此,一旦图像不在视图中,您就不能仍然持有它的引用。因此,例如有一个 UIImageView *temp,并且您不再显示它,您必须这样做:
temp.image = nil;
这可确保您不持有 ref。此外,如果您在这方面需要更多帮助,请查看this。它还内置了一些缓存,因此您不必为此烦恼
【讨论】:
以上是关于UIImage缓存清除问题的主要内容,如果未能解决你的问题,请参考以下文章