美文网首页
你知道Method Swizzle有几种方式可实现方法交换 ?

你知道Method Swizzle有几种方式可实现方法交换 ?

作者: 轻重缓急 | 来源:发表于2019-06-02 11:22 被阅读0次

        作为一名iOS开发人员,相信一定知道Method Swizzle,甚至在实际开发中,也会经常使用,但你真的全面了解Method Swizzle吗?

1、method swizzle是干什么的?

       method Swizzle是利用OC的Runtime特性,动态改变SEL(方法编号)和IMP(方法实现)的对应关系,达到OC方法调用流程改变的目的。在OC中,SEL 和 IMP 之间的关系,就好像一本书的“目录”。SEL 是方法编号,就像“标题”一样。IMP是方法实现的真实地址,就像“页码”一样。他们是一一对应的关系。

2、知道了method swizzle是用来改变OC方法调用流程的,那么,有几种方式来实现呢?

      2.1、exchange方式       

method_exchangeImplemations方式

通过这种方式来达到方法交互的目的,是大部分iOS开发者常用的方式,但是这种方式,在使用的过程中,还是有一些需要注意的地方,稍不注意,就会产生莫名其妙的crash,在这里就不详细说明,会在另一篇文章中详细的说明(Method Swizzle的坑)。

    2.2、replace函数替换IMP      

replaceMethod方式

这种方式可能有些iOSer看着比较陌生,它是通过替换原始IMP的方式来达到方法交换的效果,在iOS逆向开发中是经常会用到的。

    2.3、getIMP和setIMP函数

method——setImplementation方式

如果第二种方式你感觉陌生的话,这种方式也会有同样的感觉,哈哈。该方式是通过获取原始IMP,然后重新设置IMP的方式,来达到实现方法交互的目的,这种方式在正向开发中,也是有效的,但它和第二种一样通常应到在iOS逆向开发中。

总结:

虽然,第二种和第三种常用在iOS逆向开发中,但是,他们在iOS正向开发中也是同样有效的。

相关文章

网友评论

      本文标题:你知道Method Swizzle有几种方式可实现方法交换 ?

      本文链接:https://www.haomeiwen.com/subject/twitxctx.html