OC底层 - Method-Swizzling 方法交换

Method-Swizzling 是什么?

Method-Swizzling的含义是方法交换,就是我们常说的iOS黑魔法,其主要作用是在运行时将一个方法的实现替换成另一个方法的实现。

Method-Swizzling的原理

我们常说的AOP(Aspect Oriented Programming,面向切面编程),就可以使用method-swizzling来实现,AOP是面向切面进行提取封装,提取各个模块中的公共部分,提高模块的复用率,降低业务之间的耦合性。

  • 每个类都维护着一个方法列表(methodList),methodList中有不同的方法,每个方法中包含了方法的sel和IMP,方法交换就是将sel和imp原本的对应断开,并将sel和新的IMP生成对应关系

如下图所示,交换前后的sel和IMP的对应关系


方法交换过程

Method-Swizzling涉及的相关API

通过sel获取方法Method
class_getInstanceMethod //获取实例方法
class_getClassMethod //获取类方法
method_getImplementation //获取一个方法的实现
method_setImplementation //设置一个方法的实现
method_getTypeEncoding //获取方法实现的编码类型
class_addMethod //添加方法实现
class_replaceMethod //用一个方法的实现,替换另一个方法的实现
method_exchangeImplementations //交换两个方法的实现

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容