一个Hybrid APP,如何做离线缓存策略?也可以简单来说,你的APP只是一个壳,里面真正加载的内容是H5,如果优化加载内容的速度?
先了解一下NSURLProtocol从字面意思看它是一个协议,但是它其实是一个类,而且继承自NSObject。它的作用是处理特定URL协议的加载。它本身是一个抽象类,提供了使用特性URL方案处理URL的基础结构。你可以自己创建NSURLProtocol的子类,来让自己的应用支持自定义的协议或者URL方案。
应用程序永远不需要直接实例化一个NSURLProtocol子类。当一个下载开始的时候,系统创建一个合适的protoco对象来响应URL请求。你要做的就是自己定义一个你自己的protocol,然后在APP启动的时候调用registerClass:,让系统知道你的协议。
这里需要注意:你不能在watchOS 2以及更高版本中自定义URL scheme和协议。
为了支持特定的自定义请求,你最好定义NSURLRequest 或者NSMutableURLRequest。让自定义的这些对象来实现请求,这里需要使用NSURLProtocol的propertyForKey:inRequest:和setProperty:forKey:inRequest,然后你可以自定义NSURLResponse类来模拟返回信息。
接下来就开始对UIWebView进行离线缓存处理。
首先,我们需要自定义一个NSURLProtocol的子类,并且在AppDelegate.m的
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [NSURLProtocol registerClass:[ZGURLProtocol class]]; return YES; }