创建属于自己的SDWebImage...

作者: CveniEs | 来源:发表于2016-02-23 00:34 被阅读315次

因为离职的关系,在寻找工作的工程中呢也写点自己学习到的知识点分享给所有的程序员,当然,我是渣渣,如果有些的不对的请指出来,我会积极改正.
好了,今天我们要做的是实现类似于SDWebimage的异步加载图片的原理;首先新建一个类用于下载图片,对象方法和类方法:如下图所示:


屏幕快照 2016-02-22 下午10.14.04.png

我们可以看到,第一个参数就是我们可以得到的照片的url地址,不过是一个字符串的类型,之后会有一个block进行回调,包含两个参数,error用来得到解析中出现的错误,当error为空的之后,则可以显示得到解析的图片;这就是需要定义的两个方法,用来实现图片的下载;
接下来我们需要实现这两个方法,在CveniEsWebImage.m中实现,我们先来看一下实现的过程;


屏幕快照 2016-02-22 下午10.25.16.png
类似于SDWebImage,我让该类以单例的形式存在于程序中;需要有初始化方法;单例的创建方法想必大家也不陌生了,用的是GCD的一个创建方法,会很容易就能够写出来;
接下来在类方法中调用初始化方法创建对象,让对象调用对象方法;这样就简单的写出了一个类方法,在使用的过程中节约了很多的代码;
屏幕快照 2016-02-22 下午10.25.32.png

最后呢,我们开始写对象方法,也是重点的重点;首先,我们将urlString转化为NSURL类型;我们先从缓存中寻找图片数据,如果没有我们再去实现图片下载的功能;经过md5加密之后,从缓存中寻找一样的图片数据,如果有,则使用Block回调获取UIImage类型的图片;否则,实现图片下载的功能;这里我使用的是NSURLSession的方法实现下载,如果有错误,直接打印错误,返回,如果没有错误但是获取的image数据不对,则是图片的格式出现问题;当这两种错误都没有出现,则说明我们下载的图片是正确的,将下载的数据写入缓存中,在通过Block回调所获取的image和error对象异步返回主线程;最后别忘了[dataTask resume];这个方法;否则无法实现下载功能

屏幕快照 2016-02-22 下午10.26.00.png 屏幕快照 2016-02-22 下午10.25.50.png
   到这里,我们已经实现了图片下载的功能,但是,对于类似于SDWebImage那种还有占位图的功能是怎么实现的,我们需要进行一下的步骤;我们新建一个Category,继承于UIImageView;同时写出两个对象方法,一个拥有占位图,一个没有占位图;具体的实现步骤我们先来看一下图片;
屏幕快照 2016-02-22 下午10.47.37.png 屏幕快照 2016-02-22 下午10.47.48.png

在包含占位图的方法中,先让UIImageView的image属性等于我们给定的占位图;因为是Block中回调得到下载的image对象,所以我们使用__weak来进行弱引用;引入我们创建的下载图片的头文件,使用类方法实现异步下载图片,如果error存在则无法显示图片;如果image不存在也无法显示图片,最后让imgView.image=image;则可以实现异步加载图片了.具体的代码我会上传到GitHub上,有兴趣的同学可以自己下载下来仿照写一下,我也是自己写一点,网上抄一点,不管怎么样把别人的东西变成自己的才是最好的,日积月累总会学到很多的,代码写的不好,还请多多指出来.最后如果有哪家公司在招聘iOS开发,请联系我,坐标北京,求大神带,想学到更多的知识

GitHub下载地址:https://github.com/CveniEs/imageDownload.git

相关文章

  • 创建属于自己的SDWebImage...

    因为离职的关系,在寻找工作的工程中呢也写点自己学习到的知识点分享给所有的程序员,当然,我是渣渣,如果有些的不对的请...

  • 创建属于自己的Cocoapod

    能够搜索到这个文章,相信大家对Cocoapods已经有一些基本的了解,关于初始化Cocoapod的问题,网上已经有...

  • 创建属于自己的vpn

    首先需要申请一台国外服务器

  • 创建属于自己的专题

    今天看了迎新班512卓芸同学的创建专题,非常喜欢,原来在简书还可以这样开发的。 创建简书专题,相当于在微信里建群,...

  • 创建属于自己的专题!

    今天迎新班七月营的学习任务是专题的了解,创建与分享。对于专题,我还不太了解。于是,我就按照教程,找到我的——点开我...

  • CocoaPods创建属于自己的库

    https://www.cnblogs.com/chzheng/p/7883757.html

  • 如何创建属于自己的依赖

    一、创建一个项目 二、将项目上传到GitHub上(具体上传的流程大家应该都晓得)我的demo地址传送门(如下图) ...

  • 创建属于自己的私有库

    相信每个Developer都会在使用Cocoapods这儿第三方库管理工具,虽然有时候pod install的时候...

  • 创建属于自己的Yeoman Generator

    背景 最近自己写了下自己项目的react的脚手架,以前一直采用种子文件进行复制,最近看到yo,想通过命令行自动去生...

  • iOS 创建属于自己的Framework

    前言 如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件。然而,这种方法并不是很优雅。它会暴露所有的实...

网友评论

  • 彬哲:代码风格越来越像我了,加油!

本文标题:创建属于自己的SDWebImage...

本文链接:https://www.haomeiwen.com/subject/cxubkttx.html