unrecognized selector-消息转发

http://www.cocoachina.com/ios/20150604/12013.html

文章提到的测试demohttps://github.com/zhen7216/MessageForwarding/tree/master

消息转发的应用:from:
作者:王勇
感谢楼上的回答。最近刚刚结束一个项目,也碰巧遇到了相关的实际应用,这里就强行自问自答一波。由于我负责的项目需要支持到iOS7,而众所周知,目前主流应用都是运行在iOS9+环境以下,因此,编码时不得不考虑到系统兼容性的问题。然而题主首次面对多系统适配,缺乏相关经验,所以也就没有考虑到:某些新出来的方法仅支持iOS8+or9+or10+系统,而在iOS7系统下无法使用。这也就造成了一个问题——使用搭载iOS7的机型跑项目的时候,莫名地会崩溃。而调试发现,崩溃的原因正式那个经典的"Unrecognized selector send to instance ********”首先想到的解决方案就是,将出现这些问题的地方统统替换成旧的、低版本系统能够支持的方法。然而项目异常庞大,光是替换都得花费一个小时。非常不划算。这时候,消息转发就闪亮登场了!我们只需要通过全局断点,定位到低系统不能响应的方法。将方法名提取出来,在resolveInstanceMethod方法中拦截该方法名,并将它的实现指派给另一个方法,即可。这样,就做到了,高版本系统响应高版本方法,低版本系统执行低版本方法的目的。省时省事!

你可能感兴趣的:(unrecognized selector-消息转发)