AFNetworking源码解析与面试考点思考

最近重读了AFNetworking 3.x的源码,算是温故而知新吧。也梳理了一些优秀的代码细节和面试考点,罗列下来,发现这个库小而精致,简直初学者的宝藏库。

开源库怎么看?

先说个题外话,阅读优质的开源代码库,绝对是程序员们快速提升自我的有效途径,而怎样高效率的去阅读源码同样也是一个问题,不知道有没有人和我之前一样,碰到过读倒是读了,但总感觉收获不大的情况。

这里分享一下我的一些读码经验:

  1. 多思考,多抛出问题,比如说

    • 整体的代码结构是怎样的?类与类之间的关系是怎样的?为什么要这么设计?
    • 代码有没有涉及到多线程,其线程模型是怎样的?哪类问题可以适用这种多线程的方案?
    • 代码中使用了哪些设计模式?具体是怎么实现的?
  2. 也可以关注代码细节,遇到不熟悉的用法不要放过,多刨根究底才能夯实基础

    关于AFNetworking的一些优秀代码细节,我这里也整理了一部分,可以查阅后文

  3. 一定要记笔记和总结,能分享更好。

    参考费曼学习法,我认为这一点是最好的加深理解和强化记忆的手段。随着年龄的增大,记忆力会有所衰退,有个笔记能够回顾,能节约大把再次记忆的时间。此外,多与人分享还能够提升自己的影响力,与人交流验证,也能够为自己查缺补漏。

AFNetworking 3.x的代码结构

还是说回到AFNetworking这里,AF的代码结构大部分人应该都了解,这里我简单介绍下。AFNetworking 3.x的代码结构比2.x要简单许多,主要也得益于苹果优化了网络相关的api,整体代码有这么几部分:

  • AFURLSessionManager/AFHTTPSessionManager

    这里就是AF代码的核心了,主要负责网络请求的发起,回调处理,是在系统网络相关API上的一层封装。大部分逻辑是在AFURLSessionManager里面处理的,AFHTTPSessionManager则是专为HTTP请求提供了一些便利方法。如果需要扩展其他协议的功能(比如FTP协议),可以考虑从AFURLSessionManager创建一个子类。

  • AFURLRequestSerialization/AFURLResponseSerialization

    这两兄弟主要处理一些参数序列化相关的工作。AFURLRequestSerialization是将传入的参数构造成NSURLRequest,比如自定义的header,一些post或者get参数等等。 AFURLResponseSerialization主要是将系统返回的NSURLResponse处理成我们需要的responseObject,比如json、xml、image等等

  • AFSecurityPolicy

    处理https相关的公钥和验证逻辑。目前由于苹果ATS的开启,基本HTTPS已

你可能感兴趣的:(objective-c,ios,xcode,面试)