0

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

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

第二种选择:

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

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

这是我完成的代码:

        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;
                });
    });
    }

有什么办法可以清除缓存?

4

2 回答 2

5

关于这两种方法

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

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

没有办法清除这个缓存

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

此方法不缓存图像对象。

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

于 2013-07-23T03:39:14.770 回答
0

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

于 2013-07-23T03:27:34.057 回答