1.為什么要學(xué)runtime?
最首要的原因是很多招聘要求提到這個,你不能不會吧。其次你寫代碼的時候有時候用到會很方便。
2.runtime機(jī)制是什么?
runtime,英文翻譯,運行時,它像操作系統(tǒng)一樣,用來執(zhí)行我們編寫的代碼。
它是基于C和匯編語言寫的,
3.怎么學(xué)runtime?
直接點它能干嘛?
簡單來說它可以獲得某個類的所有成員變量、屬性、方法,并且能夠動態(tài)添加。
可以動態(tài)交換方法、歸檔和解檔、字典轉(zhuǎn)模型等。
具體作用:發(fā)送消息、交換方法、動態(tài)添加方法、給分類加屬性、字典轉(zhuǎn)模型、
快速歸檔等
3.1發(fā)送消息
Dog.h文件
#import <Foundation/Foundation.h>
@interface Dog : NSObject
- (void)run;
+ (void)eat;
@end
Dog.m實現(xiàn)
#import "Dog.h"
@implementation Dog
- (void)run
{
NSLog(@"一只狗正在奔跑。。。。");
}
+ (void)eat
{
NSLog(@"一只狗正在吃。。。。");
}
@end
ViewController.m實現(xiàn),調(diào)用兩個方法
#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
現(xiàn)在引入runtime機(jī)制
引入頭文件,修改配置,不然會報錯
11809FA9-0A91-415D-98AE-046A5375D0BC.png
ViewController.m引入runtime機(jī)制,發(fā)送消息,來執(zhí)行方法
#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