作为一名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方式

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

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

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