標籤:方法 c語言 中文 nil 修改 建立 之一 介面 很多
什麼是Runtime?
Runtime 又叫運行時,是一套底層的 C 語言 API,其為 iOS 內部的核心之一,我們平時編寫的 OC 代碼,底層都是基於它來實現的。
多數情況我們只需要編寫 OC 代碼即可,Runtime 系統自動在幕後搞定一切,所以很多朋友對runtime不是很重視,等面試的時候經常被面試官卡住.我也是新手,吃了這個虧,所以對runtime進行了學習,以通俗易懂的方式分享給大家
Runtime 的作用
可以通過Runtime修改系統方法,比方說我們平時在項目中用到WKWebView(UIWebView)去載入一些url,如果在URL中含有中文,OC語言是不能夠識別出該URL的.所以我們輸出的URL為null,此時介面就載入不出來,那麼我們如何去避免這種問題?
第一種方式,使用Category(類的擴充)首先我們建立一個繼承與NSURL的擴充
然後我們在這個擴充的.h中寫一個類方法
然後在.m中去實現
最後回到自己的控制器去匯入這個擴充到標頭檔,將本來系統的URLWithString 改成自己擴充的類方法,這樣我們就能輕易的定位到為什麼自己的URL沒有載入出來了
那麼重點來了,我們如何使用Runtime去實現修改系統提供給我們的方法呢?(不用自訂方法)
首先大家要知道,執行URLWithString方法的時候,系統內部會首先調用+(void)load方法,那我們就在這個方法裡邊使用Runtime進行修改,先匯入標頭檔#import <objc/runtime.h>然後在load方法中將系統的URLWithString方法和我們之前自訂的BX_UrlWithString方法進行交換.也就是說,當我們調用URLWithString方法載入url的時候,讓系統內部自動調用我們自訂的BX_UrlWithString方法中來.都有注釋,此時我們在我們控制器中用URLWithString去載入URL就會實現了在他的內部多一個我們自己加的功能(判斷URL是否為nil)
到這裡我們就實現了使用Runtime實現系統內部方法的修改. 新手分享,大神不喜勿噴.
iOS~runtime理解 - (開發面試必備)