iOS面试总结

最近要开始面试了,写个随便做一些记录,方便日后总结使用,话不多说直接进去主题

一、WKWebview相关的问题问的还是比较多的,针对问过的问题,做一个小的整理。

1、webview的加载流程是怎样的?

初始化 ——— 建立连接、服务器处理 ——— 页面框架渲染 ——— JS加载 ——— JS解析、编译、执行 ——— 数据呈现

webview展示流程

美团的技术团队对webview的说明真的不错,请参考

2、复杂URL页面加载 如何优化

其实优化的问题是基于webview的加载流程去操作的,webview的加载方式相较于native,在交互上体验是差一点的,优化可以在加载过程中的每一步都去做。复杂的页面在我看来侧重点应该是在第二三个阶段的区别。具体如下,

· 预先下载离线包,达到立即展示的效果 ,但是需要主要安全性的问题(经过加密和校验,防止运营商和第三方对其劫持篡改)

· 客户端代替请求 但是有个问题:WKWebView 无法使用 NSURLProtocol 拦截 http 请求。不过网上有相应的方法,这个我理解有限。

这个问题我觉得是考察你解决问题的能力,以上的回答虽然比较笼统,但是至少能体验出思考问题的能力和对webview相关知识有最基本的了解。

3、与JS的交互 

这个的话就比较基础了

· OC调用JS方法

[webView evaluateJavaScript:@"******('abc')"completionHandler:^(id _Nullable data, NSError * _Nullable error) {if(error) { NSLog(@"error:%@",error); } }];

· JS调用OC

需要的类 WKUserContentController 协议 WKScriptMessageHandler ,双方约定好方法名,调用之后走的代理  -(void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message

需要注意的事WKUserContentController 需要 释放add和remove成对出现避免内存泄露WKUserContentController*userCC=config.userContentController;                                              [userCC addScriptMessageHandler:selfname:@"showMobile"];                                                [userCC removeScriptMessageHandlerForName:@"showMobile"];

参考链接

二、runtime相关知识

runtime是OC精华的部分,当然也是面试必不能少的,网上对runtime的总结感觉已经很到位了,但是给我的感觉的就是这部分内容会让你抽象,对一部分开发者来说理解起来确实有难度,包括我自己也觉得了解的也不是很深入,好在我们可以肆无忌惮的汲取前辈们的结论。

你可能感兴趣的:(iOS面试总结)