Ios UIWebView中的缓存图像需要更长时间才能加载?(NSURL协议?)

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"] ||

我通过NSURLProtocol向UIWebView提供本地图像(这意味着图像几乎立即返回),但我遇到了一个问题,即缓存图像(第一次加载后再次显示图像)的加载时间较长。我的协议中有什么导致这个的吗

@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秒,然后再次继续下载剩余的数据。