記讀iOS源碼的幾次嘗試

前言

話說前言都是用來扯淡的,無論是記筆記還是分享給別人看,前言的扯淡讓自己再次讀起來能回想起當時寫下此文的心情;讓別人讀起來最大程度上和分享者達成共識,那就扯上幾句

無可厚非,讀優秀的源碼是提高自己快捷而有效的方式;如何讀到優秀的源碼?直白點說找github星星最多的項目。雖說有很多項目存在刷star的嫌疑,但是,github上面上萬star的項目也不是刷星就能刷出來的。其次,上萬star的項目也很多,能都全部讀懂并深入理解也已經很厲害了吧。

最后說明:文章是對自己解讀源碼的一些記錄。

緣由

  • 英文比較渣
  • 有c/c++語言功底不能浪費
  • 項目中引入三方庫,出現bug調試時跟蹤到三方庫的調用都會跳過,以至于一個bug調試會浪費很多時間在猜測和不斷跟蹤代碼中
  • 最不能忍的是,三方庫引入其他三方庫,莫名其妙的一個小功能引入一大堆東西
  • 最重要的也許是,我為什么要使用三方庫(為什么不能自己去實現)

由此,從學Objective-C開始,就嘗試了以各種方式讀源碼,有些開源庫會因為解讀的方式不對,前前后后使用了很多方式,大多方式都會因為不符合而中途中斷。錯誤的方式,堅持的越久越讓人產生壞的情緒,給人以挫敗感。尤其是我這種需要通過成就感來不斷前進的人。

iOS開發100個優秀開源項目

iOS GitHub Top 100是CocoaChina推送的,雖說CocoaChina被大牛稱為新手樂園,但是也一直在努力給我們這些新手更好的東西。大概看了下,有AFNetworking,Masonry,SDWebImage等大部分項目必備的,也有ASIHTTPRequest等停更的,還有一些可用可不用的項目??傮w來說,根據自己的需求挑選著閱讀吧。

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閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,702評論 25 708
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,162評論 4 61
  • 我希望你的戾氣可以不要這么重。
    于嫻閱讀 236評論 1 0
  • 單體模式提供了一種將代碼組織為一個邏輯單元的手段,這個邏輯單元中的代碼可以通過單一變量進行訪問。 單體模式的優點是...
    JSUED閱讀 524評論 0 0
  • 今天武漢學習第一天老師講到人的五大天性1、愛2、連結3、自我價值4、安全感5、獨立自主,和正在踐行的正面管教有很多...
    愛蘋果的敏閱讀 98評論 0 0