开发中,我们不可避免要使用,别人花很多时间打磨好的轮子,轮子好用,但有时却无法完全满足我们的要去,这时我们不可避免的要去修改增强一下这个库,如何增强?

我认为,一般有两种修改的方式: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,也要添加到测试那两个框架,否则会报错。

转载于:https://www.cnblogs.com/dzq1991/p/6520611.html

如何优化增强第三方库?相关推荐

  1. python安装第三方库 找不到、匹配不到库的问题(多目标优化)

    python安装第三方库 找不到.匹配不到库的问题 就自己安装pygmo所出现问题的亲身经历,谈一下安装第三方库时,找不到/匹配不到第三方库时应该怎么去解决的思路. 我当时在安装pymgo时,出现&q ...

  2. python人工智能方向第三方库_Python进阶-第三方库管理和虚拟环境

    本文为<爬着学Python>系列第十三篇文章. Python能在这几年火起来,靠的不是网上一大片的爬虫和服务器后端知识的应用(本专题就是这样的,这么说真的好吗?不过我们总得认清事实是吧.) ...

  3. Python3.x:第三方库简介

    环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...

  4. iOS 常用第三方库及插件

    //菜单切换 https://github.com/pujiaxin33/JXCategoryView //各种导航栏样式 https://github.com/rickytan/RTRootNavi ...

  5. Python 第三方库大全看这一篇就够了(1000+工具包)

    awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然语言处理.机器学 ...

  6. iOS常用第三方库大全,史上最全第三方库收集

    下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableVie ...

  7. IOS常用第三方库《转》

    UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...

  8. Python基础知识(八):模块化、标准库、第三方库

    一.模块化编程理念_什么是模块_哲学思想 1.模块和包概念的进化史 Python 程序由模块组成.一个模块对应python 源文件,一般后缀名是:.py. 模块由语句组成.运行Python 程序时,按 ...

  9. iOS 开发第三方库全集

    下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableVie ...

最新文章

  1. ADAS摄像头20个技术挑战
  2. 在FreeBSD上安装Bugzilla
  3. python将元组转换为列表_使用python将元组转换成列表,并替换其中元素
  4. wxWidgets:wxDataInputStream类用法
  5. 卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义
  6. 面试官 | count(1)、count(*) 、count(列名) 有什么区别?
  7. 一款简单易用的mp3录音软件
  8. pytorch读取单通道图片
  9. canvas.toDataURL()报错
  10. OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法
  11. mysql主从复制周期_Mysql主从复制
  12. SHA1hash算法C语言实现
  13. uniapp获取手机屏幕高度
  14. Inno Setup 为程序创建桌面快捷方式
  15. 用Java实现信号量机制
  16. 19寸宽屏液晶显示器的设置 有效保护视力
  17. 思科 交换机 全局、telnet、consol 密码配置
  18. 计算机视觉中的transformer模型创新思路总结
  19. hosts.ics或hosts权限修改、GitHub无法访问Windows下载问题
  20. git 查看提交版本以及回滚到指定的版本

热门文章

  1. mysql存储过程实例_mysql存储过程案例讲解
  2. 翁恺c语言第6周编程答案,程序设计入门——C语言 第6周编程练习 1 分解质因数(5分)(示例代码)...
  3. 怎么进行数据平滑滤波_气相色谱数据处理方法 EWG1990仪器学习网
  4. mysql 查询执行过程_深入浅出Mysql(一)——sql查询执行过程
  5. 『设计模式』开发设计的七大原则,我做人还是挺有原则,那些代码呢?
  6. 关于SQL语言,这些你不得不了解!
  7. 洛谷P1122 最大子树和 树形DP初步
  8. 【IT笔试面试题整理】位操作
  9. (转)如何选择合适的射频模块
  10. 使用javamail进行邮件发送