前几日看老司机专栏发布过一篇文章-iOS 上修改私有方法的几种方式解析,文章中提到了我们通常修改一个类私有方法的方式有以下四种:
- 通过创建 Category 复写,这种方式简单而粗暴。
- 通过
void method_exchangeImplementations(Method m1, Method m2)
等类似方式实现Method Swizzling
,也就是所谓 的黑魔法。 - 通过第三方框架
Aspects
来修改私有方法,对于项目内有强 AOP 编程需求的很可能会选择这个方式。 - 通过Facebook开源的 Fishhook 对 C 语言方法进行了 Hook 的方式,它在逆向技术中占据了很大的作用。OC 的消息转发机制是依赖于 C 函数 objc_msgSend ,那么在一些特殊需求需要直接 Hook C 函数的话,Fishhook 就会派上用场了。
从而想到了总结下iOS在多个Category
重名时,方法的调用这么一篇文章。
本文主要侧重于解决以下几个问题:
- 主类和分类中普通方法的调用顺序?
- 同一个主类的两个分类中的同名方法调用顺序?
- 分类中 +load 方法的调用顺序?
- 分类中 +initialize 方法的调用顺序?
准备工作
新建一个workspace工程,我创建了一个TestDemo工程然后创建对主类MyClass
创建了几个分类了
主类、子类和分类中的+ (void)load
方法的调用顺序
在主类和子类、分类中重写+load方法