iOS 消息传递
Objective-C 调用方法实际上是发送消息的过程,先判断接收者是否为空,如果不为空经历以下几步: 1、先从方法的缓存中查找,如果没找到进入下一步。 2、通过对象的isa指针找到类对象,在类对象的方法列表中查找;如果没找到就通过superclass指针逐层查找直到NSObject对象。如果还是没找到就执行方法动态解析。 3、方法动态解析调用: + (BOOL)resolveInstanceMethod:(SEL)sel 方法来为实例方法 sel 动态添加实现方法。如果没添加进入下一步。 4、重定向消息的接收者,通过 - (id)forwardingTargetForSelector:(SEL)aSelector 来返回可处理这条消息的对象。如果这个对象不响应这个消息则进入消息转发。 5、消息转发调用 - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector 和 - (void)forwardInvocation:(NSInvocation *)anInvocation 如果通过以上过程还没有处理这条消息就会发生crash( unrecognized selector sent to instance xxxx ), 接下来一步步实现 方法动态解析、重定向消息的接收者、消息转发 方法动态解析