运行时
初识运行时
1.什么是运行时(Runtime)
- 1)Runtime System
- 所有IOS程序的幕后支撑着都是运行时系统
- IOS程序的方法调用都是靠运行时系统来支持的
- 2)Runtime Library
- 一套苹果提供的纯C语言库(API)
- 运行时库的作用: 能为一个类动态添加成员变量、动态添加方法、动态修改方法实现
动态交换两个方法的实现 - 开发者编写的OC代码最终都转成了运行时代码。
2.通过命令将OC代码转换成C语言代码
clang -rewrite-objc xx.m
3.简单示例,通过运行时机制来修改系统自带方法的实现
#import <UIKit/UIKit.h>
@interface UIImage (KL)
+ (UIImage *)kl_imageNamed:(NSString *)name;
@end
#import "UIImage+KL.h"
#import <objc/runtime.h>
@implementation UIImage (KL)
/**
* 将类装载进内存的时候调用一次
*/
+(void)load{
//利用运行时交换两个方法的实现
Method originMethod=class_getClassMethod([UIImage class], @selector(imageNamed:));
Method diyMethod=class_getClassMethod([UIImage class], @selector(kl_imageNamed:));
method_exchangeImplementations(originMethod, diyMethod);
}
+(UIImage *)kl_imageNamed:(NSString *)name{
CGFloat systemVersion = [[UIDevice currentDevice].systemVersion doubleValue];
if (systemVersion >= 7.0) {
name = [name stringByAppendingString:@"_os7"];
}
return [UIImage kl_imageNamed:name];
}