RunTime_运行时详解
运行时机制:
消息发送机制:
RunTime 运行时:苹果提供了一个API,属于C语言的库
RunTime作用:
- 利用RunTime运行时,在程序的运行过程中,动态创建一个类。
- 利用RunTime运行时,在程序的运行过程中,动态修改一个类的属性/方法。
- 利用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
网友评论