开发中,我们不可避免要使用,别人花很多时间打磨好的轮子,轮子好用,但有时却无法完全满足我们的要去,这时我们不可避免的要去修改增强一下这个库,如何增强?
我认为,一般有两种修改的方式: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,也要添加到测试那两个框架,否则会报错。