iOS运行时方法替换(方法欺骗)

runtime高级用法,使用时请注意注释,慎用。

如下例,希望在系统方法加一层判断,通过方法替换将自定义方法替换掉系统方法。

    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/中文"];
    NSLog(@"%@",url);
#import "NSURL+url.h"
#import <objc/runtime.h>

@implementation NSURL (url)
// 装载时加载  main函数调用之前
+(void)load
{
    // 交换方法实现的IMP
    // method_exchangeImplementations  交换方法IMP实现
    // class_getClassMethod            获取类方法
    // class_getInstanceMethod         获取对象方法
    
    // 分别获取两个方法
    Method URLMet = class_getClassMethod(self, @selector(URLWithString:));
    Method HYMet = class_getClassMethod(self, @selector(HY_URLWithStr:));
    
    // 交换方法实现
    method_exchangeImplementations(URLMet, HYMet);
    
}

// 方法实现
+(instancetype)HY_URLWithStr:(NSString *)str
{
    NSURL *url = [NSURL HY_URLWithStr:str];
    if (url == nil) {
        NSLog(@"这个url为nil");
    }
    return url;
}

@end
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,031评论 3 119
  • 此次分享内容是我这一年内在群里所做的一些事,主要分为三个时间点,四个内容; 三个时间点:4.4、7.12、10.2...
    刘冰杰阅读 211评论 0 0
  • 这几天,是每年都会有的考研成绩出来的时候,在过完了让自己焦虑的春节这段痛苦焦灼的日子后,这个令自己魂牵梦绕的日子终...
    大张小调阅读 1,479评论 11 41
  • 夜半轻风入我家,门前细雨落哗哗。 天公不懂人间苦,岂晓番茹烂作渣。 【清风阁】
    清风阁阅读 273评论 0 1