# iOSSourceCodeStudy
**Repository Path**: quchangqing/iOSSourceCodeStudy
## Basic Information
- **Project Name**: iOSSourceCodeStudy
- **Description**: SDWebImage、AFNetworking、WebViewJavascriptCore、YY系列源码分析
- **Primary Language**: Objective-C
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-02-01
- **Last Updated**: 2021-02-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#AFNetworking源码阅读系列
---
[面向切面编程之 Aspects 源码解析及应用 ](http://wereadteam.github.io/2016/06/30/Aspects/)
###2.x学习
[AFNetworking 的大体思路](http://nshipster.cn/afnetworking-2/)
[AFNetworking2.0源码解析<一>](http://blog.cnbang.net/tech/2320/)
[AFNetworking2.0源码解析<二>](http://blog.cnbang.net/tech/2371/)
[AFNetworking2.0源码解析<三>](http://blog.cnbang.net/tech/2416/)
[AFNetworking2.0源码解析<四>](http://blog.cnbang.net/tech/2456/)
###3.x学习
[iOS AFNetWorking源码详解(一](http://zeeyang.com/2016/02/21/AFNetWorking-one/)
[iOS AFNetWorking源码详解(二](http://zeeyang.com/2016/03/15/AFNetWorking-two/)
[iOS AFNetWorking源码详解(三](http://zeeyang.com/2016/05/22/AFNetWorking-three/)
[iOS AFNetWorking源码详解(四](http://zeeyang.com/2016/05/23/AFNetWorking-four/)
[iOS AFNetWorking源码详解(五](http://zeeyang.com/2016/05/25/AFNetWorking-five/)
[iOS AFNetWorking源码详解(六](http://zeeyang.com/2016/05/27/AFNetWorking-six/)
###https学习
[iOS安全系列之一:HTTPS](http://oncenote.com/2014/10/21/Security-1-HTTPS/)
[图解SSL/TLS协议](http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html)
[iOS安全系列之二:HTTPS进阶](http://oncenote.com/2015/09/16/Security-2-HTTPS2/)
[苹果官网文档关于HTTPS](https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/WorkingWithHTTPAndHTTPSRequests/WorkingWithHTTPAndHTTPSRequests.html)
[HTTPS那些事(一)](http://www.guokr.com/post/114121/)
[HTTPS那些事(二)](http://www.guokr.com/post/116169/)
[HTTPS那些事(三)](http://www.guokr.com/blog/148613/)
[浅析数字证书](http://www.cnblogs.com/hyddd/archive/2009/01/07/1371292.html)
[iOS实用技巧 - AFNetworking2安全的使用自签证书访问HTTPS](https://my.oschina.net/non6/blog/290175)
[AFNetworking之于https认证](http://www.jianshu.com/p/a84237b07611)
[IOS-AFNetworking3.0配置https说明](http://www.jianshu.com/p/f10bd7cc47fc)
[iOS 中 HTTPS 证书验证浅析](http://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=2653578489&idx=2&sn=2731c8de546f423b983aad1340f30af5&chksm=84b3b6feb3c43fe8309c70d3aa5a325451a60414ade02e533def9ccf2e017f91a6c08bbc7c3b&mpshare=1&scene=23&srcid=0112Y9LZ4FFh3McYUojtSV7F#rd)
[iOS自签名HTTPS证书单向校验方案](http://www.jianshu.com/p/1baead685de4)
[如何使用ip直接访问https网站?](https://segmentfault.com/a/1190000004359232)
[iOS中HTTP/HTTPS授权访问(一)](http://www.jianshu.com/p/88336eab2b8d)
[iOS中HTTP/HTTPS授权访问(二)](http://www.jianshu.com/p/ebee00c785bd)
###源码阅读系列博客
[FMDB源码阅读系列](http://www.cnblogs.com/polobymulberry/category/789988.html)
#YY系列源码学习
---
###YYCache源码学习参考地址:
[YYCache 设计思路](http://blog.ibireme.com/2015/10/26/yycache/)
[YYCache源码分析(一)](http://www.jianshu.com/p/b8dcf6634fab)
[YYCache源码分析(二)](http://www.jianshu.com/p/492c3c3a0485)
[YYCache源码分析(二)](http://www.jianshu.com/p/67184beda1d5)
###YYModel源码学习参考地址:
[YYModel 源码历险记<一> 代码结构](http://www.jianshu.com/p/9d9119d3d1e3)
[YYModel 源码历险记<二> 关于变量类型和编码](http://www.jianshu.com/p/4455f5434dcd)
[YYModel 源码历险记<三> 关于ivar,method,property](http://www.jianshu.com/p/9cc00239c548)
[YYModel 源码历险记<四> 对Class的封装](http://www.jianshu.com/p/c4e5941e6aef)
[YYModel 源码历险记<五> YYModelPropertyMeta神奇的next](http://www.jianshu.com/p/9723761d02db)
[YYModel 源码历险记<六> YYModelMeta](http://www.jianshu.com/p/59584e5560e6)
###YYWebImage学习
[读码笔记-YYWebImage源码 (一) - YYWebImageManager](http://huangshaohua.cn/2015/12/29/du-ma-bi-ji-yywebimageyuan-ma/)
[读码笔记-YYWebImage源码 (二) -YYWebImageOperation](http://huangshaohua.cn/2016/01/02/du-ma-bi-ji-yywebimageyuan-ma-er-yywebimageoperation/)
[读码笔记-YYWebImage源码 (三) -YYImageCache](http://huangshaohua.cn/2016/01/05/du-ma-bi-ji-yywebimageyuan-ma-san-yywebimagecache/)
#SDWebImage的源码分析和学习
---
###学习博客地址列表,仓库中的部分代码带中文注释持续学习中,待会儿活干完了继续学习:
[我自己实现SDWebImage基本功能的demo](https://github.com/huang303513/GCD-OperationQueue-Exploration/tree/master/HCDWebImage)
[SDWebImage源码分析--加载gif图片](http://www.bubuko.com/infodetail-633704.html)
[图片处理:Image I/O 学习笔记](http://www.jianshu.com/p/4dcd6e4bdbf0)
[SDWebImage源码解析之SDWebImageManager的注解](http://www.jianshu.com/p/6ae6f99b6c4c)
[SDWebImage源码解析之SDWebImageManager的注解(2)](http://www.jianshu.com/p/0f9a7296f4c0)
[SDWebImage源码学习-One](http://www.jianshu.com/p/b18de01e0cc8)
[SDWebImage源码剖析(-)](http://www.jianshu.com/p/c07df06c60be)
[SDWebImage源码剖析(二)](http://www.jianshu.com/p/d401ec7626eb)
###结构说明:
`UIImageView+WebCache.h`通过`SDWebImageManager`单列来管理图片的加载、缓存和回调。主要的入口类。
`SDWebImageManager`通过拥有一个`SDImageCache`和`SDWebImageDownloader`来实现图片的缓存和下载器功能。这个类应该是框架的核心和枢纽功能的类。`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是最好的处理方式