1.為什么要學(xué)runtime?
最首要的原因是很多招聘要求提到這個(gè),你不能不會(huì)吧吭练。其次你寫代碼的時(shí)候有時(shí)候用到會(huì)很方便诫龙。
2.runtime機(jī)制是什么?
runtime鲫咽,英文翻譯签赃,運(yùn)行時(shí),它像操作系統(tǒng)一樣,用來(lái)執(zhí)行我們編寫的代碼分尸。
它是基于C和匯編語(yǔ)言寫的锦聊,
3.怎么學(xué)runtime?
直接點(diǎn)它能干嘛?
簡(jiǎn)單來(lái)說(shuō)它可以獲得某個(gè)類的所有成員變量箩绍、屬性孔庭、方法,并且能夠動(dòng)態(tài)添加。
可以動(dòng)態(tài)交換方法、歸檔和解檔圆到、字典轉(zhuǎn)模型等怎抛。
具體作用:發(fā)送消息、交換方法芽淡、動(dòng)態(tài)添加方法马绝、給分類加屬性、字典轉(zhuǎn)模型挣菲、
快速歸檔等
3.1發(fā)送消息
Dog.h文件
#import <Foundation/Foundation.h>
@interface Dog : NSObject
- (void)run;
+ (void)eat;
@end
Dog.m實(shí)現(xiàn)
#import "Dog.h"
@implementation Dog
- (void)run
{
NSLog(@"一只狗正在奔跑富稻。。白胀。唉窃。");
}
+ (void)eat
{
NSLog(@"一只狗正在吃。纹笼。纹份。。");
}
@end
ViewController.m實(shí)現(xiàn),調(diào)用兩個(gè)方法
#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ī)制
引入頭文件廷痘,修改配置蔓涧,不然會(huì)報(bào)錯(cuò)
ViewController.m引入runtime機(jī)制,發(fā)送消息笋额,來(lái)執(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