文档章节

iOS源码分析二十例 (0.前言)

danielwyo
 danielwyo
发布于 2017/02/10 14:13
字数 926
阅读 25
收藏 0

源码分析目的是什么

源码分析的目的并不是单纯的为了肢解代码, 这只是过程, 它的目的是为了让自己能够对代码的理解更加深刻, 培养自己的直观理解力, 增强自己的代码输出能力, 同时也增加自己对复杂代码的理解能力. 所谓的源码分析, 其实是对一个复杂的源码进行降维分析, 降到自己的能力所能理解的程度, 这样, 随着源码分析能力的增进, 个人的理解能力也会上升. 

 

源码分析到底在分析什么

  1. 代码实体细节, 对一些特定的问题, 通过分析源码, 我们进行判断这段代码具体是如何实现解决问题的方法, 对于以后来说, 我们就知道了这个知识点, 一旦遇到类似问题, 我们有对应的解决方案. 
  2. 代码抽象细节, 在知道代码的实体之后, 我们再分析代码的规范设计, 以及代码的逻辑技巧, 大约能够明白作者在这段代码中的巧妙用心, 懂得了这些技巧, 我们可以提升自己的代码能力.
  3. 代码架构体系, 代码的架构本身并不是清晰可见的, 甚至是一段代码中看不出来的, 它是我们阅读完所有代码之后, 对代码的整体有一个详细了解, 从而提取出来一套架构的描述. 对我们开发者来说, 能够获得的帮助是以后开发的时候, 可以根据需求判断, 是否可以应用或者参考此种框架. 
  4. 寻找美学体验, 在分析完成之后, 我们可以根据自己的技术能力, 对这个代码的逻辑缜密度, 代码的美观程度以及代码的体系化进行评估. 这是最抽象的一部分工作, 但是, 我认为这是最重要的一个工作, 如果仅仅提取一些知识点, 其实对个人来说, 提高的层次并不会太高, 那只是应用层的. 而我们最终是希望这些代码体验, 可以作为我们个人的直观能力进行培养的, 以后一旦碰到代码, 即可在很粗略的范围内, 大致就理解代码的各个层次. 

 

我打算怎么做

我的做法是选择大约20个iOS的开发库和开源项目, 然后按照上述的4点进行整理, 每整理出来一套思路, 就写一篇文章. 如果遇到相对比较庞大的项目, 可能分多篇进行分析. 在我的目标中, 几个比较重点要分析的库, 包括AsyncDisplayKit, RxSwift, Parse for iOS, Realm等. 这几个将会作为重点, 放在最后来讲解. 

 

先来一个开胃菜:

下一篇, 将是第一讲 -- MBProgressHud的源码分析

 

敬请期待

 

© 著作权归作者所有

共有 人打赏支持
danielwyo
粉丝 1
博文 13
码字总数 19257
作品 0
技术主管
私信 提问
iOS火焰动画效果、图文混排框架、StackView效果、偏好设置、底部手势等源码

iOS精选源码 高性能图文混排框架,构架顺滑的iOS应用。(http://www.code4app.com/thread-10375-1-1.html) 使用OpenGLE覆盖阿尔法通道视频动画播放器视图。(http://www.code4app.com/thread-3...

sunnyaigd
07/31
0
0
iOS基础深入补完计划--NSURLSession使用详解(附Demo)

目录 前言 API Demo 前言 本文主要是把NSURLSession以及NSURLSessionTask相关的代理方法全部整理了一下。 旨在大体了解在一个iOS网络请求中、一个任务究竟经理了什么。 而我们、又能做些什么...

kirito_song
05/10
0
0
ios界面自动化工具--Appium

ios界面自动化工具--Appium Appium是一款开源的移动端自动化测试框架,支持Android和Ios,之前简单介绍过Appium,链接http://www.yeetrack.com/?p=639。最近在做ios的自动化测试,再详细记录一...

youthflies
2014/10/29
0
0
iOS动画效果集合、 通过摄像头获取心率、仿淘宝滑动样式、瀑布流、分类切换布局等源码

iOS精选源码 动画知识运用及常见动画效果收集(http://www.code4app.com/thread-13354-1-1.html) 较为美观的多级展开列表(http://www.code4app.com/thread-14656-1-1.html) MUImageCache -简单...

sunnyaigd
08/23
0
0
iOS源码补完计划--AFNetworking(二)

目录 前言 AFNetworkReachabilityManager.h AFNetworkReachabilityManager.m API注释Demo 参考资料 前言 AFNetworking源码第二篇 主要看了看AFNetworkReachabilityManager的内容 作为一个辅助...

kirito_song
05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

技术工坊|如何开发一款以太坊钱包(深圳)

【好消息!】HiBlock区块链技术工坊已经成功举办了26期,其中北京1期,西安1期,成都2期,上海22期。经常有社区的小伙伴问定期举办技术工坊的除了上海以外,其他城市有没有?现在区块链技术工...

HiBlock
昨天
1
0
Redis 梳理笔记

安装 安装gccyum install gcc-c++下载传输到服务器上解压tar -xzvf *.tar.gzcd redis-3.2.9编译make安装 make PREFIX=/usr/local/redis install将配置文件拷贝出来cp redis...

晨猫
昨天
0
0
PyCharm flask 'Debug mode off' 调试模式关闭的解决方法

flask的几种debug模式的方法 # 1.app.run 传参debug=trueapp.run(debug=True) #2 设置app的配置app = Flask(__name__)app.config['DEBUG'] = True #3 配置文件方式# config.py中添加d...

yimingkeji
昨天
1
0
聊聊storm TridentWindowManager的pendingTriggers

序 本文主要研究一下storm TridentWindowManager的pendingTriggers TridentBoltExecutor.finishBatch storm-core-1.2.2-sources.jar!/org/apache/storm/trident/topology/TridentBoltExecut......

go4it
昨天
1
0
java实现多线程两种基本方式

我们在开发当中经常会使用到多线程,这里我们来写两个小案例通过最基本的两种方式继承Thread类或实现Runnable接口来实现一个多线程。 继承Thread类 我们可以通过继承Thread类,并重写run()方...

王子城
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部