美文网首页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_方法交换

    RunTime_运行时详解 运行时机制: 消息发送机制: RunTime 运行时:苹果提供了一个API,属于C语言...

  • IOSRunTime_动态添加方法

    利用RunTime运行时,动态添加一个方法 动态添加方法,首先实现这个resolveInstanceMethod ...

  • iOS 方法交换

    交换类方法 交换实例方法

  • iOS -- runtime的应用

    runtime主要有一下几种应用场景 方法交换 添加属性 (一)方法交换 (1)字体适配 方法交换实际交换的是方法...

  • iOS 方法交换 method_exchangeImplemen

    方法交换 使用方法交换需要注意些什么呢 1、在交换系统方法后要注意结束前调用本方法,也就是执行系统方法 2、再交换...

  • OC runtime 底层API解析

    关于class的API 交换方法API 替换方法的实现 交换方法的实现

  • 交换方法

    利用runtime可以修改系统的方法实现,这种方式无任何侵入性,因此也是很多第三方常用的技术。它的解决具有全局性;...

  • 方法交换

    +(void)load load当类加载进内存的时候调用,而且不管有没有子类,都只会调用一次。在main函数之前调...

  • 交换方法

  • 交换方法

    几个函数 一、选择合适的时机,交换方法 二、替换方法内部使用注意

网友评论

    本文标题:IOSRunTime_方法交换

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