iOS高级开发工程师面试——常见第三方框架架构设计

发布于:2025-07-17 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、SDWebImage

1. SDWebImage 组织架构:

在这里插入图片描述
SDWebImageDownloader :负责维持图片的下载队列;
SDWebImageDownloaderOperation:负责真正的图片下载请求;
SDImageCache:负责图片的缓存;
SDWebImageManager:是总的管理类,维护了一个SDWebImageDownloader 实例和一个 SDImageCache 实例,是下载与缓存的桥梁;
SDWebImageDecoder:负责图片的解压缩;
SDWebImagePrefetcher:负责图片的预取;
UIImageView+WebCache:和其他的扩展都是与用户直接打交道的。

2. SDWebImage 图片加载流程:

在这里插入图片描述

  1. 判断图片URL 是否为 nil,是则做出错处理并返回;
  2. URL MD5加密生成 key;
  3. 根据 key 读取内存(memory)缓存, 有则拿到图片返回,否则往下;
  4. 根据 key 读取磁盘(disk)缓存,有则拿到图片返回,否则往下;
  5. 根据URL 下载图片,下载成功则将图片保存到 内存和磁盘中返回图片

二、AFNetWorking

AFNetWorking 组织架构:主要有5个模块

  1. AFHTTPSessionManager :是对 NSURLSession 的封装,负责发送网络请求,是 AFNetWotking 中使用最多一个模块

  2. AFNetworkingReachabilityManager :实时监测网络状态的工具类

  3. AFSecurityPolicy :网络安全策略的工具类,主要是针对于 Https 服务

  4. Serializstion :请求序列化工具类

    • AFURLRequestSerialization:请求入参序列化工具基类

    • AFURLResponseSerialization :请求回参序列化工具基类

      • AFJSONResponseSerializer : Json 解析器,
      • AFNetWorking 的默认解析器
      • AFXMLParserResponseSerializer :XML 解析器
      • AFHTTPResponseSerializer : 万能解析器,直接返回二进制数据(NSData),服务器不会对数据进行处理
  5. UIKit : 对iOS UIKit 的扩展
    5.1. AFNetworking 2.x怎么开启常驻子线程?为何需要常驻子线程?
    在 2.x 版本中 AFNetWorking 通过 RunLoop 开启了一个常驻子线程,具体代码是这样的

+ (void)networkRequestThreadEntryPoint:(id)__unused object {
   
     {
   
        [[NSThread currentThread] setName:@"AFNetworking"

网站公告

今日签到

点亮在社区的每一天
去签到