使用SDWebImage开源框架实现图片的下载与存储

之前我们已经在多线程基础中,通过把图片的网络请求放到非主线程中,来优化了整个app的卡顿情况。但是,这并不是最优解,因为当我们滑动页面的时候,图片并没有被保存下来,每次显示相同的图片,仍然要从网络中请求并加载。
进一步的优化是应该把初次请求的图片保存在缓存中,下一次显示的时候直接从缓存中读取,由于读取缓存的速度肯定大大小于网络请求的速度,所以通过把图片存储下来,可以进一步优化app的流畅性。接下来我们就介绍下在ios开发中图片存储的方案和流程。
同样的,这里我们介绍一个开源框架–SDWebImage来实现图片的请求和存储。

使用SDWebImage开源框架请求图片和存储

SDWebImage的下载和包含到工程文件的操作我们可以使用cocoaPods来集成。具体操作可以参考我之前介绍的一篇文章:
cocoaPods集成AFNetWorking开源框架

 //方法三:使用GCD实现
//    dispatch_queue_global_t downoadQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //获取非主队列
//    dispatch_queue_main_t mainQueue = dispatch_get_main_queue(); //获取主队列
//    //在非主队列中,异步执行,执行获取图片的高耗时操作
//    //异步:打开了多道门,可以同时穿过门(多线程)
//    dispatch_async(downoadQueue, ^{
//        UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:item.picUrl]]];
//        dispatch_async(mainQueue, ^{
//            //在主线程中执行UI操作,异步执行
//            self.rightimageView.image = image;  //UI操作必须在主线程中执行,否则会报警
//        });
//    });
    
    //使用开源框架SDWebImage实现
    //这里在第一次请求后直接将图片保存在缓存中,执行完毕后保存在磁盘里,下一次运行直接从磁盘加载到缓存中,优化了图片加载的速度
    [self.rightimageView sd_setImageWithURL: [NSURL URLWithString:item.picUrl]
                                  completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType 				    					cacheType, NSURL * _Nullable imageURL) {
                                        NSLog(@"");  //回调,请求流程结束后执行该回调
                                    }];

上面的代码展示了使用SDWebImage框架实现图片的请求和存储。通过使用SDWebImage,不仅仅优化了app的流畅性,而且我们只需要传入URL就可以完成所有操作,也让我们的编码变得更加简单。

其它开源框架:

FastImageCache:FastImageCache是在SDWebImage的基础上进一步优化了图片的存储方案,它使用了MMap(一种内存文件映射的方法)进一步优化了存储方案。
LKImageKit:它也做了一些针对性的优化。
整个图片的加载就涉及到了网络、存储、多线程的应用。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值