记读iOS源码的几次尝试

前言

话说前言都是用来扯淡的,无论是记笔记还是分享给别人看,前言的扯淡让自己再次读起来能回想起当时写下此文的心情;让别人读起来最大程度上和分享者达成共识,那就扯上几句

无可厚非,读优秀的源码是提高自己快捷而有效的方式;如何读到优秀的源码?直白点说找github星星最多的项目。虽说有很多项目存在刷star的嫌疑,但是,github上面上万star的项目也不是刷星就能刷出来的。其次,上万star的项目也很多,能都全部读懂并深入理解也已经很厉害了吧。

最后说明:文章是对自己解读源码的一些记录。

缘由

  • 英文比较渣
  • 有c/c++语言功底不能浪费
  • 项目中引入三方库,出现bug调试时跟踪到三方库的调用都会跳过,以至于一个bug调试会浪费很多时间在猜测和不断跟踪代码中
  • 最不能忍的是,三方库引入其他三方库,莫名其妙的一个小功能引入一大堆东西
  • 最重要的也许是,我为什么要使用三方库(为什么不能自己去实现)

由此,从学Objective-C开始,就尝试了以各种方式读源码,有些开源库会因为解读的方式不对,前前后后使用了很多方式,大多方式都会因为不符合而中途中断。错误的方式,坚持的越久越让人产生坏的情绪,给人以挫败感。尤其是我这种需要通过成就感来不断前进的人。

iOS开发100个优秀开源项目

iOS GitHub Top 100是CocoaChina推送的,虽说CocoaChina被大牛称为新手乐园,但是也一直在努力给我们这些新手更好的东西。大概看了下,有AFNetworking,Masonry,SDWebImage等大部分项目必备的,也有ASIHTTPRequest等停更的,还有一些可用可不用的项目。总体来说,根据自己的需求挑选着阅读吧。

iOS开源项目 是一个大牛整理在Github上的iOS开发的开源库,包含了很多东西。大部分是Objective-C的源码,有些东西也比较老了。但是,还是有很多有用的东西,也许里面的源码自己可以维护一下为自己项目服务,或者某些项目会提供给你一个好的思路来开发自己的项目。

源码阅读尝试

  1. 先框架,后分解

这是从C++转过来尝试的第一种方式,当初读的第一个iOS项目是AFNetworking,我想尝试通过读源码来快速熟练Objective-C的使用,无疑我高估了自己的能力,也选错了项目。

方法简述:

通过开源项目简介了解到项目的用途

通过给出的示例进行简单测试以熟悉它的用法

开始真正的项目分析,流程有三步:

1 一般的开源项目会包含在一个文件夹中,与文件夹同名的会有一个.h文件,这个文件中一般会包含很多头文件(这些头文件大部分会是分析入口),使用者只要包含一个头文件即可。

2 根据类文件和类文件中的注释大概了解到这个类的作用(有些开源项目会提供文档),并对每个类的作用进行了划分。

3 暂时不去了解每一个方法的具体实现,从入口开始分析,跟踪方法的调用流程,然后扩展到对每个接口进行如此分析。

失败总结:

Objective-C语法还不能熟练使用就开始读源码

选择了AFNetworking这个代码量相对比较大,而且需要对http协议有深入理解的项目

对AFNetworking还不能熟练使用,这也许是最重要的一点(想要深入,必须先熟练使用)

有一部分功能必须知道在具体实现里面做了什么事,才能继续分析调用流程

还有个人的一个坏习惯,读代码记录的笔记不整理,等再次读这个开源项目的时候,笔记不是被自己删了,就是找不到了。

2.先了解功能,再测试方法,最后分析如何实现

这是在可以写一个iOS项目后的尝试(也算是第二次尝试), 由于当时仿写网易新闻客户端,请求过来的图片包含gif图,当gif图片显示到界面上的时候,模拟器内存暴增而且并不会下降,滚动到300-400M左右app就崩溃了。因此,开始研究SDWebImage这个开源库。

方法简述:

由于项目中对SDWebImage的使用比较单一,只针对有一个接口进行了大量的调用。
因此根据之前的方式走到了第三部,开始针对一个接口进行详细的分析。

失败总结:

这个方式看似是成功的,确实针对这一个接口进行了全面分析,也明白了具体的工作流程。但是,也仅限于这一个接口。SDWebImage这个开源库无疑是优秀的,里面除了对图片进行下载,还有专门的缓存处理,而针对缓存这部分足以封装为一个单独的三方库。

3.前段时间看到有人分享了阅读源码的方式,根据开源项目Github提交的版本从最早到最新的进行chekout,并开始阅读(也就是从1.0到2.0,再到3.0,因为最早的版本,功能相对都比较少,代码量就比较小)

总结:

首先,这个并不算自己尝试的一种吧,因为读过AFNetworking2.X版本的代码和AFNetworking3.0的代码。由于iOS9.0后为了安全使用了https,导致2.X到3.0的升级变动还是挺大的。虽然2.X版本已经引入了NSURLSession并封装了类,但是,大部分开发者并没有使用,因此2.X的代码量相对3.0大了不少,对于第一次读源码的人,如果从2.X读可能就搞不明白。相对来说,3.0则直接移除了旧的类,全部使用了NSURLSession,代码量也减了不少。

其次,每个人读取源码的思路是不一样的。针对自己,拿到源码首先希望对其有个整体的认知,了解其如何架构,这虽然在前期会花费很多时间。但是,随着后续对代码的阅读,无疑是可以快速的上手的。

4.这是最近的一次尝试(算是第三次吧),尽管中间也有其他尝试,但是都因为方式不适合自己而放弃。而这次,也是因为对Objective-C的熟练掌握,以及经过几个项目的磨练,在对三方库的使用上也有了新的认知(不要重复造轮子:在自己认为,当自己技术达到一定的水平后,不要去重复的写一些没有意义的东西;找现成的三方库或代码片段,去重构)。

方法简述

依旧沿用前面的方式:

首先,根据类文件进行划分;

其次,找到入口处,对业务模块进行划分;

再次,针对每一个分支了解到其调用流程,在这一步划分时跟踪代码很容易乱,跟着跟着就看不懂了(只能说自己功底还是不够深)。针对这个问题,专门对代码做了2个备份:一个用来参考,一个用来删除(不用的都删除,细节功能都删除,因为往往混淆的都是这些封装的小功能函数)。

最终,把一个业务分支的流程都显示在一屏中,过长的方法则收缩起来,然后参考这个流程,在另一份代码中跟踪代码梳理流程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容