【问题标题】:UIImage cache clearing problemUIImage缓存清除问题
【发布时间】: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];
        }
    }

非常感谢任何建议。

问候,

萨蒂什

【问题讨论】:

    标签: caching ios4 uiimage release


    【解决方案1】:

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

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

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

    希望这会对你有所帮助。

    【讨论】:

    • 感谢 iphonefun 的回复。我试着回复你
    【解决方案2】:

    需要延迟加载,并且管理内存的方法是确保您不会将资源保留给您不需要的东西。

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

    temp.image = nil;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      相关资源
      最近更新 更多