美文网首页iOS开发
IOSRunTime_方法交换

IOSRunTime_方法交换

作者: _CLAY_ | 来源:发表于2017-04-03 17:28 被阅读51次

    RunTime_运行时详解

    运行时机制:

    消息发送机制:

    RunTime 运行时:苹果提供了一个API,属于C语言的库
    RunTime作用:

    1. 利用RunTime运行时,在程序的运行过程中,动态创建一个类。
    2. 利用RunTime运行时,在程序的运行过程中,动态修改一个类的属性/方法。
    3. 利用RunTime运行时,遍历一个类的所有属性和方法。

    头文件:<objc/runtime> <objc/message>(包含了runtime)
    Method:成员方法
    Ivar :成员变量
    利用RunTime实现方法交换(以NSURL为例)

    - NSURL+url.h

    #import <Foundation/Foundation.h>
    @interface NSURL (url)
    + (instancetype)LL_URLWithStr: (NSString *)str;
    @end
    

    - NSURL+url.m

    #import "NSURL+url.h"
    #import <objc/message.h>
    
    @implementation NSURL (url)
    
    //当这个类被加载的时候
    + (void)load {
    //    方法交换!!!
    //    思路:拿到两个方法(Method),然后通过runtime提供的方法交换函数进行交换
    //    拿到两个Method
    //    class_getClassMethod     拿到一个类的类方法
    //    class_getInstanceMethod  拿到一个类的对象方法
    
        Method URLWith = class_getClassMethod([NSURL class], @selector(URLWithString:));
        Method LL_URL  = class_getClassMethod([NSURL class], @selector(LL_URLWithStr:));
        //交换方法
        method_exchangeImplementations(URLWith, LL_URL);
    }
    + (instancetype)LL_URLWithStr:(NSString *)str{
        NSURL *url = [NSURL LL_URLWithStr:str];
        if (url == nil) {
            NSLog(@"URL为空");
        }
        return url;
    }
    @end
    

    相关文章

      网友评论

        本文标题:IOSRunTime_方法交换

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