返回

追溯iOS方法找不到时的处理过程,绝妙解析!

IOS

方法快速查找和慢速查找过程如前文所述,如果方法找不到会做什么呢,有没有挽救的机会呢?本文将对这些问题进行探究。

一、Objective-C消息转发机制

Objective-C的消息转发机制,提供了一种在找不到方法时动态处理消息的方式,程序员可以自定义消息处理过程,以实现更灵活和强大的功能。

消息转发机制主要分为两个步骤:

  1. 方法决议 :在找不到方法时,系统会先调用resolveInstanceMethod:或resolveClassMethod:方法,尝试动态决议方法。如果方法决议成功,则继续执行消息发送过程;否则,进入下一步。

  2. 消息转发 :如果方法决议失败,系统会调用forwardInvocation:方法,将消息转发给其他对象处理。程序员可以通过重写forwardInvocation:方法,自定义消息处理逻辑。

二、方法决议

方法决议允许程序员在运行时动态添加方法。Objective-C提供了两个方法来实现方法决议:resolveInstanceMethod:和resolveClassMethod:。

  1. resolveInstanceMethod: 当找不到实例方法时,系统会调用resolveInstanceMethod:方法,尝试动态决议实例方法。如果方法决议成功,则继续执行消息发送过程;否则,进入消息转发阶段。

  2. resolveClassMethod: 当找不到类方法时,系统会调用resolveClassMethod:方法,尝试动态决议类方法。如果方法决议成功,则继续执行消息发送过程;否则,进入消息转发阶段。

三、消息转发

消息转发允许程序员在找不到方法时,将消息转发给其他对象处理。Objective-C提供了forwardInvocation:方法来实现消息转发。

当方法决议失败时,系统会调用forwardInvocation:方法,将消息转发给其他对象处理。程序员可以通过重写forwardInvocation:方法,自定义消息处理逻辑。

四、实例方法和类方法的异同

实例方法和类方法是Objective-C中两种不同的方法类型。实例方法与特定实例相关,而类方法与类本身相关。

  1. 实例方法: 实例方法与特定实例相关,只能通过实例调用。实例方法可以访问实例变量和实例方法。

  2. 类方法: 类方法与类本身相关,可以通过类名或实例调用。类方法可以访问类变量和类方法。

总结

Objective-C的消息转发机制提供了一种在找不到方法时动态处理消息的方式,程序员可以自定义消息处理过程,以实现更灵活和强大的功能。

方法决议允许程序员在运行时动态添加方法。消息转发允许程序员在找不到方法时,将消息转发给其他对象处理。

实例方法与特定实例相关,只能通过实例调用。类方法与类本身相关,可以通过类名或实例调用。