在IOS开发中我们会经常碰到类似下面这样的错误:
分析其原因:大概是因为调用了某个类没有实现的方法,导致程序报错。然后,对象的方法走向是先去自身里面查找,如果有直接被调起,如果没有则去父类的方法中查找,沿着继承链一直往下查找,没找到就进入下面的消息转发流程了。
然而深入去分析一波,则要牵扯到IOS的消息转发机制了。
下面简单的分析一下IOS中消息转发机制的流程走向,这里有一张图可以很清晰的介绍具体走向:
方法一:resolveInstanceMethod
// -------转发流程------------
+ (BOOL)resolveInstanceMethod:(SEL)sel
{
NSLog(@"resolveInstanceMethod:%@",NSStringFromSelector(sel));
if (sel == @selector(log1) ) {
class_addMethod([self class], sel, (IMP)log1, "V@:");//此方法未实现时,走到下一步
return YES;
}
BOOL canResolve = [super resolveInstanceMethod:sel];
re