上一篇文章续捂,我們比較偏理論的介紹了一下iOS運行時機制runtime,這一篇我們就來講解一下runtime在實際開發(fā)中的應(yīng)運場景宦搬。
利用runtime牙瓢,交換兩個方法的實現(xiàn)。什么意思间校?
顧名思義:方法1:method1 方法2:method2矾克;在開發(fā)過程中,在利用runtime對這兩個方法的實現(xiàn)進(jìn)行交換前憔足,我調(diào)用method1就會執(zhí)行method1的實現(xiàn)代碼胁附;我調(diào)用method2就會執(zhí)行method2的實現(xiàn)代碼。當(dāng)我們利用runtime交換method1與method2之后滓彰,調(diào)用method1就會執(zhí)行method2的實現(xiàn)代碼控妻,調(diào)用method2就會執(zhí)行method1的實現(xiàn)代碼。
先簡單看一下效果:
在工具類中先聲明并實現(xiàn)這三個方法
在其他的類中調(diào)用截圖如下:
下面我們從修改系統(tǒng)的類方法的角度來分析一下runtime交換方法的實現(xiàn)過程揭绑。需求:當(dāng)我們調(diào)用[NSDate date]時饼暑,返回一個 @"yyy:MM:dd HH:mm:ss";格式且顯示當(dāng)前時間的字符串。這里我們的需求涉及到了改動系統(tǒng)的類方法,所以只能通過runtime實現(xiàn)弓叛。要記渍镁印:當(dāng)我們需要修改、完善或者徹底替換系統(tǒng)的某個方法時撰筷,一般都會使用到runtime陈惰。
1.為NSDate添加分類并實現(xiàn)我們自己想要的效果
2.然后在load方法里面實現(xiàn)方法交換
// 思考:在我們自定義的方法的實現(xiàn)里面,我們用到了需要交換的方法[NSDate date]毕籽,見圖4抬闯,return那一行。你認(rèn)為在這里應(yīng)不應(yīng)該這樣寫了关筒?
正確截圖: