图片地址,在百度中任意找一个图片的URL
1.图片异步加载,不阻塞主线程
2.将图片存入缓存,不重复加载
3.网络请求异常而加载失败后,恢复可重新加载
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self downLoadImage];
}
- (void)downLoadImage
{
NSString *urlStr =@"http://c.hiphotos.baidu.com/image/w%3D230/sign=5cb0e1995043fbf2c52ca120807fca1e/77c6a7efce1b9d1667165ef0f0deb48f8d54644a.jpg";
//拿到缓存的目录和文件名
NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *cachePath = [cacheDir stringByAppendingPathComponent:@"77c6a7efce1b9d1667165ef0f0deb48f8d54644a.jpg"];
//判断文件是否存在
if ([[NSFileManager defaultManager] fileExistsAtPath:cachePath])
{
//文件已经存在,从本地加载
UIImage *image = [UIImage imageWithContentsOfFile:cachePath];
self.imageView.image = image;
return;
}
NSURL *url = [NSURL URLWithString:urlStr];
dispatch_async(dispatch_get_global_queue(0, 0), ^{
//将图像保存到缓存目录中,下次启动时,检查缓存目录中是否有图像文件,如果有,
//就不去网络上加载
NSData *data = [NSData dataWithContentsOfURL:url];
//将文件保存到缓存目录
// 将二进制数据写到缓存目录
[data writeToFile:cachePath atomically:YES];
UIImage *image = [UIImage imageWithData:data];
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = image;
});
});
}
@end