当我从远程服务器找不到图像时,我正在加载默认图像:
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;
});
});
}
有什么方法可以清除缓存吗?
答案 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。