最近要開始面試了,寫個隨便做一些記錄,方便日后總結(jié)使用,話不多說直接進去主題
一、WKWebview相關(guān)的問題問的還是比較多的,針對問過的問題,做一個小的整理。
1、webview的加載流程是怎樣的?
初始化 ——— 建立連接、服務(wù)器處理 ——— 頁面框架渲染 ——— JS加載 ——— JS解析、編譯、執(zhí)行 ——— 數(shù)據(jù)呈現(xiàn)

美團的技術(shù)團隊對webview的說明真的不錯,請參考
2、復(fù)雜URL頁面加載 如何優(yōu)化
其實優(yōu)化的問題是基于webview的加載流程去操作的,webview的加載方式相較于native,在交互上體驗是差一點的,優(yōu)化可以在加載過程中的每一步都去做。復(fù)雜的頁面在我看來側(cè)重點應(yīng)該是在第二三個階段的區(qū)別。具體如下,
· 預(yù)先下載離線包,達到立即展示的效果 ,但是需要主要安全性的問題(經(jīng)過加密和校驗,防止運營商和第三方對其劫持篡改)
·?客戶端代替請求 但是有個問題:WKWebView 無法使用 NSURLProtocol 攔截 http 請求。不過網(wǎng)上有相應(yīng)的方法,這個我理解有限。
這個問題我覺得是考察你解決問題的能力,以上的回答雖然比較籠統(tǒng),但是至少能體驗出思考問題的能力和對webview相關(guān)知識有最基本的了解。
3、與JS的交互?
這個的話就比較基礎(chǔ)了
· OC調(diào)用JS方法
[webView evaluateJavaScript:@"******('abc')"completionHandler:^(id _Nullable data, NSError * _Nullable error) {if(error) { NSLog(@"error:%@",error); } }];
· JS調(diào)用OC
需要的類 WKUserContentController 協(xié)議?WKScriptMessageHandler ,雙方約定好方法名,調(diào)用之后走的代理??-(void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message
需要注意的事WKUserContentController 需要 釋放add和remove成對出現(xiàn)避免內(nèi)存泄露WKUserContentController*userCC=config.userContentController;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [userCC addScriptMessageHandler:selfname:@"showMobile"];? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??[userCC removeScriptMessageHandlerForName:@"showMobile"];
二、runtime相關(guān)知識
runtime是OC精華的部分,當然也是面試必不能少的,網(wǎng)上對runtime的總結(jié)感覺已經(jīng)很到位了,但是給我的感覺的就是這部分內(nèi)容會讓你抽象,對一部分開發(fā)者來說理解起來確實有難度,包括我自己也覺得了解的也不是很深入,好在我們可以肆無忌憚的汲取前輩們的結(jié)論。