场景:类A继承自类B,类B继承自类C,我想调用类A的fun方法,但A未实现该方法,类B也未实现fun方法,但是他实现了forwardInvocation:方法处理了当fun被调用时的逻辑,类C实现了fun方法,但是是私有的(强调私有是为了说明本场景只有C实现了fun方法,因为继承关系,若公有,那A和B也会有该方法的实现)。
当A类的实例接收到fun消息时,查找逻辑为:
1. 在A类中查找fun方法,未找到。
2. 检查A类中是否实现了forwardInvocation:方法,未找到。
3. 继续在B类中查找fun方法,未找到。
4. 检查B类中是否实现了forwardInvocation:方法,找到了。
5. 在B类中执行forwardInvocation:方法中的逻辑(可以是自定义逻辑或继续转发消息)。
不再继续往C类中查找了。
总结一下,查找方法的逻辑为:
在本类中查找方法,找到则执行,否则查找是否实现了forwardInvocation:方法,找到则执行;否则继续在父类中执行上述逻辑。