iOS如何通过runtime更改系统默认的方法

释放双眼,带上耳机,听听看~!

以更改系统的URLWithString:方法为案例

1、首先要用runtime要先在target-buildSetting中搜索msg,将出现的Enable Strict Checking of objc_msgSend Calls更改为NO
2、创建一个继承于NSURL的分类,下面上代码

(1).h文件里面声名自己创建的方法

+ (instancetype)XC_URLWithStr:(NSString *)str;

 

(2).m文件里面先导进头文件#import
<objc/message.h>

//一加载就运行的方法

+ (void)load

{

    //Method成员方法

    //获取对象方法class_getInstanceSize

    //获取类方法class_getClassMethod

    Method  URLWithStr=class_getClassMethod(self,
@selector(URLWithString:));

    Method XC_URLWithStr=class_getClassMethod(self,
@selector(XC_URLWithStr:));

    //交换方法

    method_exchangeImplementations(URLWithStr, XC_URLWithStr);

}

 

//此方法已和系统的URLWithString:方法交换

+ (instancetype)XC_URLWithStr:(NSString *)str

{

    NSURL *url = [NSURLXC_URLWithStr:str];

    if (url ==
nil) {

        NSLog(@"哥们为nill");

    }

    return url;

}

 

 

3、运行结果

在ViewController里面

NSURL *url = [NSURLURLWithString:@"www.baidu.com/中文"];

 

打印结果为:哥们为nill

 

注意点:不需要再任何地方导入我们创建的继承于NSURL的分类方法

 

人已赞赏
iOS文章

iOS中修改WebView默认的User Agent

2020-3-30 17:33:02

iOS文章

mac登录的时候如何保存账号密码在本地(通过钥匙串保存)

2020-3-30 18:48:02

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索