其他分享
首页 > 其他分享> > 第三方库相关面试问题

第三方库相关面试问题

作者:互联网

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