?
? ? ?開發中,我們不可避免要使用,別人花很多時間打磨好的輪子,輪子好用,但有時卻無法完全滿足我們的要去,這時我們不可避免的要去修改增強一下這個庫,如何增強?
? ? 我認為,一般有兩種修改的方式:1入侵式修改 2疊加式修改
? ? 1入侵式修改
? ? ? 如果涉及的地方邏輯較簡單清晰,那就直接找到目標處改它,改它的數據,改它的UI。
? ? 2疊加式修改
? ? ? 如果涉及的地方邏輯較復雜冗長,草蛇灰線,牽一發動全身,那么最好少改原作者的代碼,應該根據自己的需求,
? ? ? 新定義一些數據或UI控件,或新增一些自己的API,視情況而定。
?
?
案例1:修改IQKeyboarManager的完成按鈕,將英文Done改成中文
? ? ? ? 方式:找到定義該標題的地方,確定它在哪行代碼?或者哪個控件的定義處。
? ? ? ? 方案1:<1直接搜索Done關鍵字,但發現搜索出的條目太多,不好找,先不用
? ? ? ? 方案2:<1間接搜索其位于同一父控件的上下箭頭,發現搜出來的條目只有三個,好!,縮小范圍了,
? ? ? ? ? ? ? ? ? ? ? ?確定目標到了某個幾文件內
? ? ? ? ? ? ? ? ? <2在那幾個文件內,再次搜Done關鍵字,發現可疑目標控件,就注釋,看是否被我消失了
? ? ? ? ? ? ? ? ? ? ?舊版本很快找到了,新版本沒找到
? ? ? ? ? ? ? ? ? <3然后在一群可疑的doneAction方法內打斷點,我點擊done按鈕,看哪個方法能監聽到事件
? ? ? ? ? ? ? ? ? ? ?最后定位到一個方法,順著方法的控件,就找到目標控件了 ? ? ? ? ? ? ? ? ? ? ?
?
案例2:修改一個tag選擇控制器
? ? ? ?1一開始使用入侵時修改,但邏輯較復雜冗長,沒去仔細看,就改為疊加式修改
案例3:增強MJExtension
? ? ? 注意點:添加新文件到MJExtension,不僅要添加到該target,也要添加到測試那兩個框架,否則會報錯。
? ? ? ? ? ? ? ? ??