仿照SDWebImage实现图片下载思路

2019-02-24  本文已影响0人  usg

第一步构造图片下载的类WYWebImageManager

1.构造下载方法

2.内存中拿到图片

3.从磁盘中获取数据

3.1判断当前任务是否在下载避免重复下载

3.2自定义NSOperation下载当然SD 用的是NSURLSession 我这里为了方便就没这样,以后有时间我在继续改

我来解释下handdict为什么要这样写,如果看不懂和我交流

第二步自定义WYWebImageDownLoadOperation

2.1重载start方法

重载父类的方法,但是在ios4以后,不管是并发还是非并发,队列都会为operation提供一个线程来执行。所以isConcurrent这个变量也就没有用处了。但是,这里还设涉及到了两个方法,start和main.按照官方文档所说,如果是非并发就使用main,并发就使用start。

那现在并发和非并发已经没有区别了,start和main的区别在哪里呢?

main方法的话,如果main方法执行完毕,那么整个operation就会从队列中被移除。如果你是一个自定义的operation并且它是某些类的代理,这些类恰好有异步方法,这是就会找不到代理导致程序出错了。

然而start方法就算执行完毕,它的finish属性也不会变,因此你可以控制这个operation的生命周期了。

然后在任务完成之后手动cancel掉这个operation即可。

具体实现

锁采用的是信号量,较早的sd版本的有@synchronized,后来改成了信号量,信号量在不涉及到磁盘读写的时候性能非常高,

2.操作任务

重载父类的属性

1.将KVO改成手动关闭自动,保证不会被随意调用

第三步UIImageView+WYWebCache

1.为外界提供下载方法

if (self.wy_urlString && self.wy_urlString.length>0 && ![self.wy_urlString isEqualToString:urlString])

第4步外界调用

这就是仿照SDWebImage的实现图片下载的思路

其他

1处理内存警告

2.加载图片路径

与SD不同的是SD用实在NSCache里面创建了一个Default文件夹管理自己下载的图片,这样话不会影响到我们的app 其他放在Cache的文件

3.清理内存

上一篇 下一篇

猜你喜欢

热点阅读