diff --git a/ASHWebURLProtocol.xcodeproj/project.xcworkspace/xcuserdata/xmfish.xcuserdatad/UserInterfaceState.xcuserstate b/ASHWebURLProtocol.xcodeproj/project.xcworkspace/xcuserdata/xmfish.xcuserdatad/UserInterfaceState.xcuserstate index 759c766..8ad8dc4 100644 Binary files a/ASHWebURLProtocol.xcodeproj/project.xcworkspace/xcuserdata/xmfish.xcuserdatad/UserInterfaceState.xcuserstate and b/ASHWebURLProtocol.xcodeproj/project.xcworkspace/xcuserdata/xmfish.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/README.md b/README.md index 0e8f20b..c372655 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,81 @@ # ASHWebURLProtocol iOS WebView缓存 +###首先继承 `NSURLProtocol` + +``` ++(BOOL)canInitWithRequest:(NSURLRequest *)request +{ + + ///通过UA 来判断是否UIWebView发起的请求 + NSString* UA = [request valueForHTTPHeaderField:@"User-Agent"]; + if ([UA containsString:@" AppleWebKit/"] == NO) { + return NO; + } + + if ([request valueForHTTPHeaderField:kHTTPHeaderField]) { + return NO; + } + return YES; +} +``` +`NSString* UA = [request valueForHTTPHeaderField:@"User-Agent"];` +中可以判断是否是`WebView`发出的请求。 +当判断是`WebView`的时候才进行处理。 + +``` +- (void)startLoading +{ + + + NSString *cachesPath = [self cachePathForRequest:[self request]]; + ASHCachedData *cache = [NSKeyedUnarchiver unarchiveObjectWithFile:cachesPath]; + + //使用缓存。 + if (cache) { + NSData *data = cache.data; + + [[self client] URLProtocol:self didReceiveResponse:cache.response cacheStoragePolicy:NSURLCacheStorageNotAllowed]; + [[self client] URLProtocol:self didLoadData:data]; + [[self client] URLProtocolDidFinishLoading:self]; + // return; + } + + //重新请求。 + NSMutableURLRequest *newRequest = [self.request mutableCopy]; + + [newRequest setValue:@"" forHTTPHeaderField:kHTTPHeaderField]; + [newRequest setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData]; + + self.connection = [NSURLConnection connectionWithRequest:newRequest + delegate:self]; + +} +``` +###上面是主要的代码,先使用了缓存,然后再去重新请求,这样就会刷新请求数据. + + +``` +- (void)connectionDidFinishLoading:(NSURLConnection *)connection { + [self.client URLProtocolDidFinishLoading:self]; + + NSString *cachesPath = [self cachePathForRequest:[self request]]; + + + + ASHCachedData *cache = [ASHCachedData new]; + cache.data = [self data]; + cache.response = [self response]; + + [NSKeyedArchiver archiveRootObject:cache toFile:cachesPath]; +} +``` + +### +最后一段就是对内容进行保存,当然也可以根据后缀把图片单独用`SDWebImage`保存,可以和原生代码里面的图片共用缓存。 + + +###最后还需要注册一下 在 `AppDelegate` 中 + +``` +[NSURLProtocol registerClass:[ASHWebNSURLProtocol class]]; +``` \ No newline at end of file