上一篇文章,我們比較偏理論的介紹了一下iOS運行時機制runtime,這一篇我們就來講解一下runtime在實際開發中的應運場景。
利用runtime,交換兩個方法的實現。什么意思?
顧名思義:方法1:method1 方法2:method2;在開發過程中,在利用runtime對這兩個方法的實現進行交換前,我調用method1就會執行method1的實現代碼;我調用method2就會執行method2的實現代碼。當我們利用runtime交換method1與method2之后,調用method1就會執行method2的實現代碼,調用method2就會執行method1的實現代碼。
先簡單看一下效果:
在工具類中先聲明并實現這三個方法
1.png
2.png
在其他的類中調用截圖如下:
3.png
下面我們從修改系統的類方法的角度來分析一下runtime交換方法的實現過程。需求:當我們調用[NSDate date]時,返回一個 @"yyy:MM:dd HH:mm:ss";格式且顯示當前時間的字符串。這里我們的需求涉及到了改動系統的類方法,所以只能通過runtime實現。要記住:當我們需要修改、完善或者徹底替換系統的某個方法時,一般都會使用到runtime。
1.為NSDate添加分類并實現我們自己想要的效果
4.png
2.然后在load方法里面實現方法交換
5.png
// 思考:在我們自定義的方法的實現里面,我們用到了需要交換的方法[NSDate date],見圖4,return那一行。你認為在這里應不應該這樣寫了?
正確截圖:
6.png