/SourceCodeResearchAndExploration

SDWebImage、AFNetworking、WebViewJavascriptCore、YYModel源码解析

Primary LanguageObjective-CApache License 2.0Apache-2.0

#AFNetworking源码阅读系列

面向切面编程之 Aspects 源码解析及应用

###2.x学习
AFNetworking 的大体思路
AFNetworking2.0源码解析<一>
AFNetworking2.0源码解析<二>
AFNetworking2.0源码解析<三>
AFNetworking2.0源码解析<四>

###3.x学习
iOS AFNetWorking源码详解(一
iOS AFNetWorking源码详解(二
iOS AFNetWorking源码详解(三
iOS AFNetWorking源码详解(四
iOS AFNetWorking源码详解(五
iOS AFNetWorking源码详解(六

###https学习
iOS安全系列之一:HTTPS
图解SSL/TLS协议
iOS安全系列之二:HTTPS进阶
苹果官网文档关于HTTPS
HTTPS那些事(一)
HTTPS那些事(二)
HTTPS那些事(三)
浅析数字证书
iOS实用技巧 - AFNetworking2安全的使用自签证书访问HTTPS
AFNetworking之于https认证
IOS-AFNetworking3.0配置https说明
iOS 中 HTTPS 证书验证浅析
iOS自签名HTTPS证书单向校验方案

如何使用ip直接访问https网站?
iOS中HTTP/HTTPS授权访问(一)
iOS中HTTP/HTTPS授权访问(二)

###源码阅读系列博客
FMDB源码阅读系列

#YY系列源码学习

###YYCache源码学习参考地址:
YYCache 设计思路
YYCache源码分析(一)
YYCache源码分析(二)
YYCache源码分析(二)

###YYModel源码学习参考地址:
YYModel 源码历险记<一> 代码结构
YYModel 源码历险记<二> 关于变量类型和编码
YYModel 源码历险记<三> 关于ivar,method,property
YYModel 源码历险记<四> 对Class的封装
YYModel 源码历险记<五> YYModelPropertyMeta神奇的next
YYModel 源码历险记<六> YYModelMeta

###YYWebImage学习
读码笔记-YYWebImage源码 (一) - YYWebImageManager
读码笔记-YYWebImage源码 (二) -YYWebImageOperation
读码笔记-YYWebImage源码 (三) -YYImageCache

#SDWebImage的源码分析和学习

###学习博客地址列表,仓库中的部分代码带中文注释持续学习中,待会儿活干完了继续学习: 我自己实现SDWebImage基本功能的demo

SDWebImage源码分析--加载gif图片

图片处理:Image I/O 学习笔记

SDWebImage源码解析之SDWebImageManager的注解

SDWebImage源码解析之SDWebImageManager的注解(2)

SDWebImage源码学习-One

SDWebImage源码剖析(-)

SDWebImage源码剖析(二)

###结构说明: UIImageView+WebCache.h通过SDWebImageManager单列来管理图片的加载、缓存和回调。主要的入口类。

SDWebImageManager通过拥有一个SDImageCacheSDWebImageDownloader来实现图片的缓存和下载器功能。这个类应该是框架的核心和枢纽功能的类。SDWebImageManager是一个单列

UIImage+GIF主要实现了对gif图片的加载功能。

SDWebImageDecoder主要实现图片的解压缩功能,从网络上下载的图片首先需要解压缩以后才能正常显示。这个类专门处理这个工作。

SDImageCache管理着SDWebImage的缓存,其中内存缓存采用NSCache,同时会创建一个ioQueue负责对硬盘的读写,并且会添加观察者,在收到内存警告、关闭或进入后台时完成对应的处理。同时在后台完成磁盘文件的清理、创建等工作。

SDWebImageDownloader主要实现下载功能和下载回调。他通过自定义的操作SDWebImageDownloaderOperation来处理具体的下载。并且管理操作之间的依赖关系为LIFO(后进先出)。这个类是单列。

SDWebImageDownloaderOperation是自定义的并发队列,最直接的负责图片的下载。通过NSURLConnection接口来实现。实现SDWebImageOperation来处理取消下载操作。在下载过程中会发送四个通知用于表示开始下载、停止下载、接收到数据、下载完成。

NSData+ImageContentType用于得到图片数据的具体类型。

##总结

###接口设计简单

通常我们使用较多的UIImageView分类:

通常我们使用较多的UIImageView分类:

[self.imageView sd_setImageWithURL:[NSURL URLWithString:@"url"] placeholderImage:[UIImage imageNamed:@"placeholder"]];

一个简单的接口将其中复杂的实现细节全部隐藏:简单就是美。 采用NSCache作为内存缓

耗时较长的请求,都采用异步形式,在回调函数块中处理请求结果

NSOperation和NSOperationQueue:可以取消任务处理队列中的任务,设置最大并发数,设置operation之间的依赖关系。

图片缓存清理的策略

dispatch_barrier_sync:前面的任务执行结束后它才执行,而且它后面的任务要等它执行完成之后才会执行。

使用weak self strong self 防止retain circle

如果子线程进需要不断处理一些事件,那么设置一个Run Loop是最好的处理方式