使用了Chrome-iOS后开始思考这个问题,如何才能替换掉 UIWebView 的网络模块。
单纯解决这个问题,有两个方法:
1、实现 NSURLProtocol,替换 HTTP 协议的处理方式。
优点:正规
缺点:影响范围大
2、实现 NSURLCache,在对应的方法中用自己的网络模块发出请求。
优点:只影响 UIWebView
缺点:只能单线程加载资源。
需找资料
1、Chrome 的代码中有其对应的iOS平台代码,发现已经完成了网络模块的迁移,并可编译成 static lib。
2、导出 Chrome 的头文件,发现其实现了 HttpProtocolHandler,该类继承自 NSURLProtocol。
猜测与结论:iOS 版的 Chrome 是通过继承 NSURLProtocol 来替换 UIWebView 的网络栈。