关闭

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

113人阅读 评论(0) 收藏 举报
分类:

图片地址,在百度中任意找一个图片的URL

1.图片异步加载,不阻塞主线程

2.将图片存入缓存,不重复加载

3.网络请求异常而加载失败后,恢复可重新加载


#import "ViewController.h"


@interface ViewController ()

@property (weaknonatomicIBOutlet 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(NSCachesDirectoryNSUserDomainMaskYESlastObject];

    NSString *cachePath = [cacheDir stringByAppendingPathComponent:@"77c6a7efce1b9d1667165ef0f0deb48f8d54644a.jpg"];

    

    //判断文件是否存在

    if ([[NSFileManager defaultManagerfileExistsAtPath:cachePath])

    {

        //文件已经存在,从本地加载

        UIImage *image = [UIImage imageWithContentsOfFile:cachePath];

        self.imageView.image = image;

        return;

    }

    

    NSURL *url = [NSURL URLWithString:urlStr];


    dispatch_async(dispatch_get_global_queue(00), ^{

        //将图像保存到缓存目录中,下次启动时,检查缓存目录中是否有图像文件,如果有,

        //就不去网络上加载

        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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:33186次
    • 积分:597
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:152篇
    • 译文:0篇
    • 评论:0条
    文章分类