美文网首页iOS Developer
iOS_黑(4)_Hook思想,来源控制器的研究;

iOS_黑(4)_Hook思想,来源控制器的研究;

作者: 丶纳凉 | 来源:发表于2017-06-05 13:45 被阅读128次

一丶问题

在多个控制器,跳转之后,想回到rootControl,调用

- (nullable NSArray<__kindof UIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated;

但是rootControl怎么知道是哪个控制来的?

实现思路:
1.delegete
2.notification
3.block

以上是基本思路,但是比较繁琐;
利用hook思想;
在系统调用popToRootViewControllerAnimated之前,把栈最上层的Controller 发给RootControl;

二丶代码实现

思路:
//1.获取实例方法;
class_getInstanceMethod
//2.获取方法实现
method_getImplementation
//3 添加自己的实现block,
注意下id self, SEL _cmd 是oc方法的隐式参数;必填;
imp_implementationWithBlock
添加自己的代码后,必须调用
popToRootIMP(self,_cmd,anima);
不然不会实现跳转;
//4.设置方法实现
method_setImplementation

+(void)load
{
   
   Method popToRootMethod =  class_getInstanceMethod([UINavigationController class], @selector(popToRootViewControllerAnimated:));
   
   IMP popToRootIMP = method_getImplementation(popToRootMethod);
   
   IMP customIMP = imp_implementationWithBlock(^(id self, SEL _cmd,BOOL anima){
      
       UINavigationController *nav = self;
       UIViewController *toVc = nav.childViewControllers.firstObject;
       UIViewController *fromVc = nav.childViewControllers.lastObject;
       NSLog(@"我从%@ 来,要到%@去",fromVc,toVc);
       popToRootIMP(self,_cmd,anima);
       
   });
   
   method_setImplementation(popToRootMethod, customIMP);
                           
}

之后看Log日志:

我从<ThreeViewController: 0x7fb936c243e0> 来,要到<ViewController: 0x7fb936d0a6a0>去

三丶总结
利用hook思想;
能把复杂的问题瞬间简单化;
像之前的AOP编程,
Runtime的深入使用,才知道Objective-C的强大之处;

相关文章

  • iOS_黑(4)_Hook思想,来源控制器的研究;

    一丶问题 在多个控制器,跳转之后,想回到rootControl,调用 但是rootControl怎么知道是哪个控制...

  • 滥用 hook 的坑

    我相信很多iOS 人员都有过 AOP思想,做过 hook 操作,这个比较方便,搞一个库,hook 控制器的生命周期...

  • 系统应用webview报错

    1.Hook思想 应用在Application中初始化hookWebView /** * Hook思想,解决roo...

  • React Hook

    Through 4 questions introduce React Hook What is Hook? In...

  • 浅谈android hook技术

    安全博客 > 技术研究 > 浅谈android hook技术 浅谈android hook技术 您当前的位置:...

  • 聊聊zerolog的Hook

    序 本文主要研究一下zerolog的Hook Hook github.com/rs/zerolog@v1.20.0...

  • Groth Hacking练习之王者荣耀

    1.前言 HOOK模型来源于《上瘾》这本书,作者好奇大家为什么会对事物上瘾,经过一堆研究抽象出这个上瘾模型。此模型...

  • IOS_编程思想_Block

    开启苹果自带的block代码块: 输入inlineBlock开启苹果自带的block代码块 举个例子 当返回值为i...

  • golang Hook

    简介 这篇文章主要是通过官方提供的 HTTP 追踪来学习使用 Hook 的编程思想。 简单来说 Hook 的编程思...

  • 奇妙的Hook编程思想

    序言:iOS中的Hook思想是我们探索runtime黑魔法的必经之路,好的程序猿是终身不断学习的开发者,一环接一环...

网友评论

    本文标题:iOS_黑(4)_Hook思想,来源控制器的研究;

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