場景:類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:方法,找到則執行;否則繼續在父類中執行上述邏輯。