我希望在iOS中为图像实现缓存功能。 我想为此创建一个示例应用程序,仅供我理解。
这是我想要做的:
从互联网上获取高分辨率图像并对其进行缓存,然后显示它。
现在,下次ViewController加载时,图像应该从缓存加载,而不是从互联网加载。
我知道如何使用SDWebImage框架缓存图像。我希望尝试使用NSCache。
如何使用NSCache实现它?欢迎举例。
已编辑:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSCache *cache = [self imageCache];
NSURL *url = [NSURL URLWithString:@"http://i1.ytimg.com/vi/YbT0xy_Jai0/maxresdefault.jpg"];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [[UIImage alloc] initWithData:data];
NSString *imagePath = @"http://i1.ytimg.com/vi/YbT0xy_Jai0/maxresdefault.jpg";
// UIImage *image;
if (!(image = [cache objectForKey:imagePath])) { // always goes inside condition
// Cache miss, recreate image
image = [[UIImage alloc] initWithData:data];
if (image) { // Insert image in cache
[cache setObject:image forKey:imagePath]; // cache is always nil
}
}
_imgCache.image = image;
答案 0 :(得分:5)
您可以使用和Id:
将图像添加到缓存[imageCache setObject:image forKey:@"myImage"];
稍后您可以使用以下方法检索图像:
UIImage *image = [imageCache objectForKey:@"myImage"];
整个流程将如下:
UIImage *image = [imageCache objectForKey:@"myImage"];
if (!image)
{
// download image
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:yourURL]];
if (imageData)
{
// Set image to cache
[imageCache setObject: [UIImage imageWithData:imageData] forKey:@"myImage"];
dispatch_async(dispatch_get_main_queue(), ^{
[yourImageView setImage:[UIImage imageWithData:imageData]];
});
}
});
}
else
{
// Use image from cache
[yourImageView setImage:image];
}
答案 1 :(得分:0)