Ios UIWebView中的缓存图像需要更长时间才能加载?(NSURL协议?)
我通过NSURLProtocol向UIWebView提供本地图像(这意味着图像几乎立即返回),但我遇到了一个问题,即缓存图像(第一次加载后再次显示图像)的加载时间较长。我的协议中有什么导致这个的吗Ios UIWebView中的缓存图像需要更长时间才能加载?(NSURL协议?),ios,ios6,uiwebview,mobile-safari,Ios,Ios6,Uiwebview,Mobile Safari,我通过NSURLProtocol向UIWebView提供本地图像(这意味着图像几乎立即返回),但我遇到了一个问题,即缓存图像(第一次加载后再次显示图像)的加载时间较长。我的协议中有什么导致这个的吗 @implementation URLProtocol + (BOOL) canInitWithRequest:(NSURLRequest *)request { return [request.URL.scheme isEqualToString:@"file"] ||
@implementation URLProtocol
+ (BOOL) canInitWithRequest:(NSURLRequest *)request {
return [request.URL.scheme isEqualToString:@"file"] ||
[request.URL.scheme isEqualToString:@"http"];
}
+ (NSURLRequest*) canonicalRequestForRequest:(NSURLRequest *)request {
return request;
}
- (void) startLoading {
id<NSURLProtocolClient> client = self.client;
NSURLRequest* request = self.request;
NSString *fileToLoad = request.URL.absoluteString;
NSURLResponse *response;
if([fileToLoad hasPrefix:@"http://app-fullpath/"]){
fileToLoad = [fileToLoad stringByReplacingOccurrencesOfString:@"http://app-fullpath/" withString:@""];
} else {
fileToLoad = [[NSURL URLWithString:fileToLoad] path];
}
NSData* data = [NSData dataWithContentsOfFile:fileToLoad];
response = [[NSHTTPURLResponse alloc] initWithURL:[request URL] statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:[NSDictionary dictionary]];
[client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
[client URLProtocol:self didLoadData:data];
[client URLProtocolDidFinishLoading:self];
}
- (void) stopLoading { }
@end
实现URLProtocol
+(BOOL)canInitWithRequest:(NSURLRequest*)request{
return[request.URL.scheme isEqualToString:@“file”]||
[request.URL.scheme isEqualToString:@“http”];
}
+(NSURLRequest*)规范请求请求请求:(NSURLRequest*)请求{
返回请求;
}
-(空)惊人的{
id client=self.client;
NSURLRequest*request=self.request;
NSString*fileToLoad=request.URL.absoluteString;
NSURLResponse*响应;
如果([fileToLoad hasPrefix:@]http://app-fullpath/"]){
fileToLoad=[fileToLoad stringByReplacingOccurrencesOfString:@”http://app-fullpath/“带字符串:@”“];
}否则{
fileToLoad=[[NSURL URLWithString:fileToLoad]路径];
}
NSData*data=[NSData data WITH CONTENTS OFFILE:fileToLoad];
response=[[nshtpurlresponse alloc]initWithURL:[请求URL]状态代码:200 HTTPVersion:@“HTTP/1.1”头字段:[NSDictionary dictionary]];
[客户端URLProtocol:self-didReceiverResponse:response-cacheStoragePolicy:NSURLCacheStorageNotAllowed];
[客户端URLProtocol:self-didLoadData:data];
[客户端URLProtocoldFinishLoading:self];
}
-(void)停止加载{}
@结束
任何速度建议,javascript/html或iOS?我的问题是UIWebView给予文本比图像更高的优先级,因此文本首先排列,然后处理图像。为了解决这个问题,我创建了一个HTML和图像的DOM表示,然后用javascript加载的图像替换了所有图像(
new Image()
),它们会立即显示出来。我的问题是UIWebView给文本的优先级比图像高得多,所以文本首先被放置,然后图像被处理。为了解决这个问题,我创建了一个HTML和图像的DOM表示,然后用javascript加载的图像替换了所有图像(new Image()
),它们会立即显示出来。为什么要将本地图像加载到UIWebView?有很多用途,例如HTML应用程序,UIWebView比UIExtView更易于操作。对于我来说,这是最好的选择。另一个用例是加载本地化图像。您可以请求本地png,在运行时检查当前区域设置并加载其他图像。您还可以通过加载一个备用css来使用它进行动态主题化,而无需更改HTML中的路径。@SandyChapman。我第一次问这个问题时你在哪里!:)在实现我自己的NSURLProtocol子类时偶然发现了您的问题。如果我有任何相关的补充,我通常会尝试添加到对话中,因为这可能会在其他人遇到问题时有所帮助。为您的问答投票。为什么要将本地图像加载到UIWebView?有很多用途,例如HTML应用程序,而且UIWebView比UITextView更易于操作。对于我来说,这是最好的选择。另一个用例是加载本地化图像。您可以请求本地png,在运行时检查当前区域设置并加载其他图像。您还可以通过加载一个备用css来使用它进行动态主题化,而无需更改HTML中的路径。@SandyChapman。我第一次问这个问题时你在哪里!:)在实现我自己的NSURLProtocol子类时偶然发现了您的问题。如果我有任何相关的补充,我通常会尝试添加到对话中,因为这可能会在其他人遇到问题时有所帮助。为您的问答投票。您能告诉我您是如何做到的吗?@Vijay我不再推荐此解决方案,因为它效率低下,并且不能解决所有情况。如果您遇到此问题,请尝试删除缓存。谢谢您的回复。我想从html加载图像。请看一看问题:当我第一次加载html页面时,一切正常,但如果我多次加载同一url,则webview会在一些数据下载后等待20-25秒,然后再次继续下载剩余的数据。您能告诉我您是如何做到的吗?@Vijay我不再推荐此解决方案,因为它效率低下,而且不能解决所有情况。如果您遇到此问题,请尝试删除缓存。谢谢您的回复。我想从html加载图像。请看一看问题:当我第一次加载html页面时,一切正常,但如果我多次加载相同的url,则webview在一些数据下载后等待20-25秒,然后再次继续下载剩余的数据。