1.为什么要学runtime?
最首要的原因是很多招聘要求提到这个,你不能不会吧。其次你写代码的时候有时候用到会很方便。
2.runtime机制是什么?
runtime,英文翻译,运行时,它像操作系统一样,用来执行我们编写的代码。
它是基于C和汇编语言写的,
3.怎么学runtime?
直接点它能干嘛?
简单来说它可以获得某个类的所有成员变量、属性、方法,并且能够动态添加。
可以动态交换方法、归档和解档、字典转模型等。
具体作用:发送消息、交换方法、动态添加方法、给分类加属性、字典转模型、
快速归档等
3.1发送消息
Dog.h文件
#import <Foundation/Foundation.h>
@interface Dog : NSObject
- (void)run;
+ (void)eat;
@end
Dog.m实现
#import "Dog.h"
@implementation Dog
- (void)run
{
NSLog(@"一只狗正在奔跑。。。。");
}
+ (void)eat
{
NSLog(@"一只狗正在吃。。。。");
}
@end
ViewController.m实现,调用两个方法
#import "ViewController.h"
#import "Dog.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[Dog eat];
Dog *d = [[Dog alloc]init];
[d run];
}
@end
现在引入runtime机制
引入头文件,修改配置,不然会报错
11809FA9-0A91-415D-98AE-046A5375D0BC.png
ViewController.m引入runtime机制,发送消息,来执行方法
#import "ViewController.h"
#import "Dog.h"
#import <objc/message.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
objc_msgSend([Dog class], @selector(eat));
Dog *d = [[Dog alloc]init];
objc_msgSend(d, @selector(run));
}
@end
网友评论