zoukankan      html  css  js  c++  java
  • iOS开发Runtime 方法替换

    通过#import <objc/runtime.h>我们可以找到:

     1 /** 
     2  * Returns a specified instance method for a given class.
     3  * 
     4  * @param cls The class you want to inspect.
     5  * @param name The selector of the method you want to retrieve.
     6  * 
     7  * @return The method that corresponds to the implementation of the selector specified by 
     8  *  e name for the class specified by e cls, or c NULL if the specified class or its 
     9  *  superclasses do not contain an instance method with the specified selector.
    10  *
    11  * @note This function searches superclasses for implementations, whereas c class_copyMethodList does not.
    12  */
    13 OBJC_EXPORT Method _Nullable
    14 class_getInstanceMethod(Class _Nullable cls, SEL _Nonnull name)
    15     OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    class_getInstanceMethod这个可以获取类的实例方法

    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface RuntimeObjc : NSObject
    
    
    -(void)runEg;
    -(void)otherRunEg;
    
    @end
    
    #import "RuntimeObjc.h"
    #import <objc/runtime.h>
    
    @implementation RuntimeObjc
    
    +(void)load{
        
        Method runEg = class_getInstanceMethod(self, @selector(runEg));
        Method otherRunEg = class_getInstanceMethod(self, @selector(otherRunEg));
      //交换 method_exchangeImplementations(runEg, otherRunEg); } -(void)runEg{ NSLog(@"runEg"); } -(void)otherRunEg{
      NSLog(@"otherRunEg");
      [self otherRunEg];//已经做了置换 故调用的runEg
       
    }
    @end

    调用

        RuntimeObjc * objc = [[RuntimeObjc alloc]init];
        [objc runEg];
    

     打印:

    2020-05-21 15:42:43.416766+0800 11111[35733:176260] otherRunEg
    2020-05-21 15:42:43.416928+0800 11111[35733:176260] runEg
    

     





  • 相关阅读:
    Jenkins修改用户密码及权限
    Selenium知识点小结
    解析图形验证码登录系统
    Pywinauto实现电脑客户端有道云签到领空间
    Python冒泡排序
    LoadRunner12常用函数
    GIT教程笔记
    LoadRunner 关联
    搭建自动化测试框架Python3+Selenium
    SSH免密从A服务器登录进B服务器,重启B服务器的tomcat
  • 原文地址:https://www.cnblogs.com/guozhihe/p/12931301.html
Copyright © 2011-2022 走看看