从网络下载图片,并存入本地缓存

图片地址,在百度中任意找一个图片的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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值