iOS 运行时使用(交换两个方法)
举例 在创建了如下代码
NSString *str=nil; NSURL *url =[NSURL URLWithString:str]; NSLog(@"%@",url);
但是想使用自己的方法并对传入的字符串做为空判断
举例 自己写了一个方法
+(instancetype)SJUrlWithStr:(NSString *)str 替代系统方法
[NSURL URLWithString:]
但是如果项目现在已经进行到了后期 就会涉及到很多界面要导入头文件 并修改使用这个方法 很不方便
那么可以自己新建一个URL的分类 在分类中使用运行时交换两个系统的方法和自己的方法快速的实现方法交换
#import "NSURL+Extension.h" #import <objc/message.h> @implementation NSURL (Extension) +(void)load{ //获取系统方法结构体 Method system = class_getClassMethod([self class], @selector(URLWithString:)); //获取自己方法结构体 Method own = class_getClassMethod([self class], @selector(SJUrlWithStr:)); // 交换方法 系统的 URLWithString 和自己的 SJUrlWithStr //交换自己方法和系统方法 method_exchangeImplementations(system, own); //以后再使用 URLWithString 的时候 其实是在调用SJUrlWithStr } +(instancetype)SJUrlWithStr:(NSString *)str{ if (str==nil) { NSLog(@"字符串为空"); return nil; } // 下面的 SJUrlWithStr 其实是使用了 URLWithString NSURL *url = [NSURL SJUrlWithStr:str]; return url; } @end
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?