iOS 项目避坑:多个分类中方法重复实现检测
前言
在项目中,我们经常会使用分类 -> category。category在实际项目中一般有两个左右:1.给已有class增加方法,扩充起能力、2.将代码打散到多个文件中,避免因为一个类过于复杂而导致代码篇幅过长(应用于viewController中很好用)
但是 category 也有很多弊端~
首先:它不可以直接添加属性(无法生成成员变量,需要使用对象关联来协助添加属性)
其次:当多人协作开发项目时,一个class可能存在多个category,iOS项目编译时,是按照一定的顺序来编译文件(编译顺序和Compile Sources的文件顺序相关),此时如果两个category实现了相同名字的方法,后编译的category中的方法会将先编译的category中相同名字的方法屏蔽,先编译category的该方法永远不会被执行~
举一个简单的例子:
这种情况Demo+A中的test方法永远不会被执行到!!
(具体原因这里不做过多介绍,感兴趣的同学可以自己查看category的底层实现原理)
解决
因为OC的这个机制,我发现这块太容易产生错误的,当自己在多个分类写代码的时候,太容易方法名重名了~(更何况绝大部分时刻,你是拷贝的别人的代码,就更容易了,咳咳~)
为了避免这类事情发生,我查了相关资料并写了一个脚本来静态检测一个类的分类是否有重名方法,技术的坑还是要靠技术解决废话不多说,直接上源码:
1、定义白名单
首先定义白名单,我定义了四种类型的白名单,分别是(文件白名单、class白名单、方法白名单、文件夹白名单),白名单中的成员不在检测范围之内
3、遍历读取文件内容
4、正则匹配获取class名字
5、正则匹配获取方法名字(生成格式:-/+方法名:)
6、方法校验
7、入口方法及使用
python Python文件名.py 文件夹路径
执行结果:
资料推荐
如果你正在跳槽或者正准备跳槽不妨动动小手,添加一下咱们的交流群1012951431来获取一份详细的大厂面试资料为你的跳槽多添一份保障。
评论