UIImage缓存清除问题

时间:2011-03-21 10:47:44

标签: caching ios4 uiimage release

我的图像从数据服务器加载消耗了大量内存,如果图像增加,一旦我移动到前一个屏幕,即使我没有使用“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所在

2 个答案:

答案 0 :(得分:0)

您需要使用Lazy Loading代码作为解决问题的方法。

在此示例中,他们使用的是Table视图,但是您不应使用tableview,而应使用触摸事件或下一个图像的任何按钮,当按下该按钮时,将下载图像然后显示。

是的如果您将尝试使用for循环加载所有图像,它将花费很多时间,因为它可能会消耗大量内存并可能导致应用程序崩溃。

希望这会对你有所帮助。

答案 1 :(得分:0)

需要延迟加载,管理内存的方法是确保不将资源保存到您不需要的内容。

因此,一旦图像不在视野中,您就不能保持对它的引用。因此,例如有一个UIImageView * temp,你不再显示它,你必须这样做:

temp.image = nil;

这可以确保您不持有它。如果您需要更多帮助,请查看this。它还内置了一些缓存,因此您无需为此烦恼