第三方库相关面试问题
作者:互联网
1.0 AFNetworking
1.1 AFNetworking的整体框架
由会话NSURLSession,网络监听模块用来监听网络的变化进行一些逻辑处理,然后网络安全模块,AFNetworking为我们请求进行了请求序列化的封装,响应序列化的封装,在此之上又有UIKit集成模块,比如UIKit原生控件分类的添加,这些就构成了AFNetworking的整体框架。
1.2 AFNetworking主要类关系
最核心的类就是AFURLSessionManager
NSURLSession:会话模块
AFSecurityPolicy:用来保证网络安全(涉及网络证书的校验)
AFNetworkReachabilityManager:对网络连接的监听
子类AFHTTPSessionManager包含:
AFURLRequestSerialzation用来负责根据我们传递的参数组装拼接最终的一个结果。 AFURLResponseSerialzation用来负责响应序列化的对网络请求的返回结果进行解析。
1.3 AFURLSessionManager负责哪些工作?
创建和管理NSURLSession,调用系统API生成NSURLSessionTask (对应一个网络请求)
实现NSURLSessionDelegate等协议的代理方法(用来处理网络请求过程中涉及到的重定向,网络相应数据等)
引入AFSecurityPolicy保证请求安全(https请求时会进行证书校验,公钥验证等)
引入AFNetworkReachabilityManager监控网络状态(根据网络状态进行相关逻辑处理)
2.0 SDWebImage
2.1 SDWebImage的整体框架
UIImageView +WebCache是由SDWebImageManager支撑
SDWebImageManager核心工作类
SDImageCache:用来处理图片缓存,磁盘缓存管理,内存缓存管理。
SDWebImageDownloader:负责具体图片下载器
2.2 SDWebImage加载图片流程?
首先进行相应图片URL的Key查找内存缓存,如果内存当中查找到了就返回给调用方,如果没有查找到就去查找磁盘缓存,如果仍然没有找到就会发起一个新的网络请求进行图片下载。
3.0 ReactiveCocoa(函数响应式编程框架)简称RAC
信号 订阅
3.1 ReactiveCocoa中的核心类RACSignal?
如下图
3.2 怎样理解信号?
信号代表一连串的状态
在状态改变时,对应的订阅ARCSubscriber就会收到通知执行响应的指令
3.3 订阅信号的工作逻辑图
3.4 RAC订阅内部的原理
当我们 产生一个ARCSubscriber类的时候,内部持有了一个成员变量,这个成员变量实际上就是didSubscriber的block,当我们调用ARCSubscriber方法的时候,内部会调用Subscriber方法执行内部保存的block。
4.0 AsyncDisplayKit(提升iOS界面渲染性能的框架)简称ASDK
4.1 AsyncDisplayKit主要处理哪些问题?
Layout —— 文本宽高计算,视图布局计算
Rendering —— 文本渲染,图片解码,图形绘制
UIKit Object —— 对象创建,对象调整,对象销毁
4.2 AsyncDisplayKit的基本原理?
针对ASNode的修改和提交,会对其进行封装并提交到一个全局容器当中
ASDK也在RunLoop中注册了一个Observer
当RunLoop进入休眠前,ASDK执行该loop内提交的所有任务
简述:系统的实现是UIView作为CALayer的delegate,而CALayer作为UIView的成员变量负责视图展示工作,ASDK这个框架在此之上封装了一个ASNode类,这个类他当中会有一个.view可以生成一个UIView,并且每一个UIView都有一个.node成员属性可以获取到他所对应的节点。对于这个产生的NSNode和UIView之间相关内容,就和UIView到CALayer有一个本质差别,NSNode可以放到后台线程去处理的,UIKit相关内容都要在主线程去使用,ASDK实际就是对UIView进行了一个封装,比如文本计算,UI布局等处理都可以通过操作NSNode去实现。
5.0 第三方库面试总结
问题1:AFNetworkig的整体结构是怎样的?
会话模块,网络监听模块,安全模块,核心类 AFURLSessionManager,最常用到的AFHTTPSessionManager。
问题2:SDWebImage框架是怎样加载图片的?
查找内存,查找磁盘,如果都没有进行网络下载。
问题3:RAC的信号订阅是什么意思?
信号是一连串状态的抽象,订阅信号是通过ARCSubscriber来实现的,实际上对于一个block作为成员变量持有,在具体调用Subscriber方法执行内部保存的block。
问题4:ASDK的实现原理?
封装了一个NSNode节点,对于视图的属性设置都转化到NSNode的设置,可以放在后台线程去实现,RunLoop将要结束的时候接受一个通知,提取全局容器当中的对应的NSNode一次性设置给UIView。
标签:封装,网络,NSNode,面试,ASDK,模块,相关,第三方,UIView 来源: https://blog.csdn.net/han63504/article/details/120336956