*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController testNoProtectCrash]: unrecognized selector sent to instance 0x7fe434607310'
方法调用的本质是消息的发送,系统给ViewController发送消息, 造成该错误的原因是消息接收者的类ViewController中,没有对应的方法testNoProtectCrash的实现,要么是类方法没有实现,要么是实例方法没有实现
/*
* 方法调用的本质是发消息
* 系统调用objc_msgSend给对象发消息
* step1:在消息接收者所属的类中搜寻其方法列表
如果找到与selector相匹配的方法,就实现selector完成该消息传递
如果第一步没有在消息接收者所属的类方法列表中搜寻到与selector相匹配的方法
就去父类中继续查找,如果最终一直无法找到匹配的方法,那么进行第二步消息转发
* step2:简称学会甩锅,把消息抛给其他对象去执行,如果能找到消息备用者,就完成消息转发
如果找不到消息备用者,就进行第三步
* step3:既不能动态生成实现,也找不到备用者的话,就把消息上报给NSInvocation,由Invocation处理
* 如果三种补救措施都没有预防到,就会产生NSInvalidArgumentException异常
*/
step1:现学方法!
LRMessageForwardDevelop为自己创建的继承于NSObject的类,如果类方法未实现就会调用resolveClassMethod方法
如果当前类与消息接收者属于同一类,就动态添加方法