場(chǎng)景:類A繼承自類B眼俊,類B繼承自類C慎颗,我想調(diào)用類A的fun方法,但A未實(shí)現(xiàn)該方法嘶卧,類B也未實(shí)現(xiàn)fun方法尔觉,但是他實(shí)現(xiàn)了forwardInvocation:方法處理了當(dāng)fun被調(diào)用時(shí)的邏輯,類C實(shí)現(xiàn)了fun方法芥吟,但是是私有的(強(qiáng)調(diào)私有是為了說(shuō)明本場(chǎng)景只有C實(shí)現(xiàn)了fun方法侦铜,因?yàn)槔^承關(guān)系,若公有钟鸵,那A和B也會(huì)有該方法的實(shí)現(xiàn))钉稍。
當(dāng)A類的實(shí)例接收到fun消息時(shí),查找邏輯為:
1. 在A類中查找fun方法棺耍,未找到贡未。
2. 檢查A類中是否實(shí)現(xiàn)了forwardInvocation:方法,未找到蒙袍。
3. 繼續(xù)在B類中查找fun方法俊卤,未找到。
4. 檢查B類中是否實(shí)現(xiàn)了forwardInvocation:方法害幅,找到了消恍。
5. 在B類中執(zhí)行forwardInvocation:方法中的邏輯(可以是自定義邏輯或繼續(xù)轉(zhuǎn)發(fā)消息)。
不再繼續(xù)往C類中查找了以现。
總結(jié)一下狠怨,查找方法的邏輯為:
在本類中查找方法约啊,找到則執(zhí)行,否則查找是否實(shí)現(xiàn)了forwardInvocation:方法佣赖,找到則執(zhí)行恰矩;否則繼續(xù)在父類中執(zhí)行上述邏輯。