• 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
    

     





  • 相关阅读:
    笨笨走了
    WSE 3.0 文档翻译:WSE架构
    系列文章索引
    WSE 3.0 文档翻译:WSE的新功能
    人分四品
    手把手教你装饰vs2005项目上如何添加右键菜单
    递归算法学习系列之三(快速排序)
    ip地址与数字相互转换的sql函数
    递归算法学习系列之寻找第K大
    WSE 3.0 文档翻译:什么时候使用WSE 3.0
  • 原文地址:https://www.cnblogs.com/guozhihe/p/12931301.html
Copyright © 2020-2023  润新知