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缓存清除问题的主要内容,如果未能解决你的问题,请参考以下文章

UIImageView和UIImage

清除部分 UIImage

UIImage 实现/分页?

从 UIImage 清除 UIView 绘图

如何在uiimage缓存中使用sdimage?

UIImage加载方式