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

转载 2015年07月07日 18:40:15

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

iOS 下载缓存网络图片 SDWebImage

SDWebImage 是一个开源的第三方库,它提供了 UIImageView 的一个分类,以支持从远程服务器下载并缓存图片的功能。...
  • u010551118
  • u010551118
  • 2016年06月18日 21:47
  • 2764

android下载网络图片并缓存

异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader     public void downloadImage(final String u...
  • heng615975867
  • heng615975867
  • 2014年02月12日 10:58
  • 7092

Qt之显示网络图片

简述Qt中包含了网络模块-network,我们可以很容易的进行各种网络编程和数据传输,关于network的类很多,其中包含:支持DNS、HTTP、TCP/UDP等众多高级类,可以参考助手。下面我们先看...
  • u011012932
  • u011012932
  • 2016年03月01日 16:07
  • 6313

Android 网络图片缓存

最近项目不是太忙  正好自己对图片缓存的接触很少 然后自己就按照自己的逻辑写了一个网络图片缓存的框架    没想到运行一下 居然实现了  当然中间肯定遇到很多问题  咱们言归正传     我现在有个需...
  • qq_20607305
  • qq_20607305
  • 2015年12月02日 10:52
  • 436

iOS开发swift版异步加载网络图片(带缓存和缺省图片)

iOS开发之swift版异步加载网络图片     与SDWebImage异步加载网络图片的功能相似,只是代码比较简单,功能没有SD的完善与强大,支持缺省添加图片,支持本地缓存。      异步加载...
  • walkerwqp
  • walkerwqp
  • 2017年01月06日 09:55
  • 1395

java 使用IO从网络下载图片-

1.依赖包 httpclient-4.4.1.jar 包 2.贴上代码记录之 /*** * 下载图片到本地 * @param imgUri * @param fileName * @r...
  • linhaiguo
  • linhaiguo
  • 2016年06月03日 16:42
  • 1502

web本地客户端缓存图片实现

摘要 1、Etag和Expires中Client 端Http Request Header及Server端Http Reponse Header工作原理。 2、静态下Apache、Lighttpd...
  • yz7074998
  • yz7074998
  • 2015年07月30日 23:41
  • 2587

SDWebImage使用,图片加载和缓存

SDWebImage使用,图片加载和缓存
  • CatStarXcode
  • CatStarXcode
  • 2017年03月20日 19:20
  • 778

【iOS】网络加载图片缓存与SDWebImage

加载网络图片可以说是网络应用中必备的。如果单纯的去下载图片,而不去做多线程、缓存等技术去优化,加载图片时的效果与用户体验就会很差。 一、自己实现加载图片的方法 tips: *iOS中所有网络访问都是...
  • xn4545945
  • xn4545945
  • 2014年07月07日 22:02
  • 45729

IOS网络图片缓存详解

在开发移动应用的时候比如Android,IOS,因为手机流量、网速、内存等这些因素,当我们的移动应用是针对互联网,并要频繁访问网络的话,对网络优化这块就显得尤为重要了。 比如某个应用要经常显示网...
  • wildfireli
  • wildfireli
  • 2014年04月08日 16:25
  • 39777
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从网络下载图片,并存入本地缓存
举报原因:
原因补充:

(最多只允许输入30个字)