iOS高级开发工程师面试——常见第三方框架架构设计
iOS高级开发工程师面试——常见第三方框架架构设计
- 一、SDWebImage
- 1. SDWebImage 组织架构:
- 2. SDWebImage 图片加载流程:
- 二、AFNetWorking
- AFNetWorking 组织架构:主要有5个模块
一、SDWebImage
1. SDWebImage 组织架构:
SDWebImageDownloader
:负责维持图片的下载队列;
SDWebImageDownloaderOperation
:负责真正的图片下载请求;
SDImageCache
:负责图片的缓存;
SDWebImageManager
:是总的管理类,维护了一个SDWebImageDownloader
实例和一个 SDImageCache 实例,是下载与缓存的桥梁;
SDWebImageDecoder
:负责图片的解压缩;
SDWebImagePrefetcher
:负责图片的预取;
UIImageView+WebCache
:和其他的扩展都是与用户直接打交道的。
2. SDWebImage 图片加载流程:
- 判断图片URL 是否为 nil,是则做出错处理并返回;
- URL MD5加密生成 key;
- 根据 key 读取内存(memory)缓存, 有则拿到图片返回,否则往下;
- 根据 key 读取磁盘(disk)缓存,有则拿到图片返回,否则往下;
- 根据URL 下载图片,下载成功则将图片保存到 内存和磁盘中返回图片
二、AFNetWorking
AFNetWorking 组织架构:主要有5个模块
-
AFHTTPSessionManager
:是对NSURLSession
的封装,负责发送网络请求,是AFNetWotking
中使用最多一个模块 -
AFNetworkingReachabilityManager
:实时监测网络状态的工具类 -
AFSecurityPolicy
:网络安全策略的工具类,主要是针对于Https
服务 -
Serializstion
:请求序列化工具类-
AFURLRequestSerialization:
请求入参序列化工具基类 -
AFURLResponseSerialization :
请求回参序列化工具基类AFJSONResponseSerializer
: Json 解析器,AFNetWorking
的默认解析器AFXMLParserResponseSerializer
:XML 解析器AFHTTPResponseSerializer
: 万能解析器,直接返回二进制数据(NSData),服务器不会对数据进行处理
-
-
UIKit
: 对iOS UIKit
的扩展
5.1. AFNetworking 2.x怎么开启常驻子线程?为何需要常驻子线程?
在 2.x 版本中AFNetWorking
通过RunLoop
开启了一个常驻子线程,具体代码是这样的
+ (void)networkRequestThreadEntryPoint:(id)__unused object { {[[NSThread currentThread] setName:@"AFNetworking"