在Objective-C中,使用对象进行方法调用是一个消息发送的过程(Objective-C采用“动态绑定机制”,所以所要调用的方法直到运行期才能确定)。
方法在调用时,系统会查看这个对象能否接收这个消息(查看这个类有没有这个方法,或者有没有实现这个方法。),如果不能并且只在不能的情况下,就会调用下面这几个方法,给你“补救”的机会,你可以先理解为几套防止程序crash的备选方案,我们就是利用这几个方案进行消息转发,注意一点,前一套方案实现后一套方法就不会执行。如果这几套方案你都没有做处理,那么程序就会报错crash。
正常运行的方法
案例分析:首先创建person类
Person.h
Person.m
运行:
如果调用的方法没有实现
注释掉run方法的实现
运行报错:原因如下
于是我们要思考:为什么会报错?以及该怎么处理这类错误?
由此我们要深入理解一些基本的概念才能知晓其中的原理
Object,Class,MetaClass概念
关系图: 详解看这里 – 深入浅出Runtime运行时之类与对象的结构
Class,Method,SEL,IMP概念
//类
typedef struct objc_class *Class;
//对象
typedef struct objc_object {
Class isa;
} *id;
//方法名
typedef struct objc_selector *SEL;
//IMP
typedef id (*IMP)(id, SEL, .