imageNamed和imageWithContentsOfFile缓存图片:无论如何清除缓存?

时间:2013-07-23 03:17:34

标签: ios uiimage uikit

当我从远程服务器找不到图像时,我正在加载默认图像:

   detailImageView.image = [UIImage imageNamed:@"noimageavailable.jpg"];

第二个选项:

detailImageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"noimageavailable" ofType:@"jpg"]];

我注意到在加载了另一张可从服务器上获得的图片后,noimageavailable.jpg仍然出现在新图片后面,这意味着noimageavailable.jpg以某种方式缓存。我使用两个选项imageNamed:imageWithContentsOfFile API得到了相同的结果。

这是我完成的代码:

        if (detailImageURL.length == 0) {
            detailImageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"noimageavailable" ofType:@"jpg"]];
//Once displayed, it's cached for all lifecycle


        }else{

        dispatch_async(DownloadQueue, ^{

            NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:detailImageURL]];
                dispatch_async(dispatch_get_main_queue(), ^{

                    detailImageView.image = nil;
                    UIImage *image = [UIImage imageWithData:imageData];
                    detailImageView.image = image;
                });
    });
    }

有什么方法可以清除缓存吗?

2 个答案:

答案 0 :(得分:5)

关于这2 methods

+ (UIImage *)imageNamed:(NSString *)name

  

此方法在系统缓存中查找具有指定名称的图像对象,并返回该对象(如果存在)。如果匹配的图像对象尚未在缓存中,则此方法从指定的文件缓存加载图像数据,然后返回生成的对象。

无法清除此缓存

+ (UIImage *)imageWithContentsOfFile:(NSString *)path
  

此方法不会缓存图像对象。

我认为,你的情况并不依赖于任何图像缓存,也不会替换图像,但每次创建新的imageView并将其添加到上一个。

答案 1 :(得分:0)

您是否有可能添加多个单独的UIImageViews?即您在调用此方法时向superview添加一个名为detailImageView的局部变量,然后再次调用此方法,并将一个名为detailImageView的新局部变量UIImageView添加到superview上旧的顶部?如果是这种情况,您应该看到[self.view.subviews count]增加,因为多次调用该方法,添加多个UIImageViews。在这种情况下,您需要在添加新的UIImageView之前删除旧的UIImageView。