1

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

@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

任何速度建议,javascript/html 或 iOS?

4

1 回答 1

1

我的问题是 UIWebView 赋予文本比图像更高的优先级,因此首先布置文本,然后处理图像。为了解决这个问题,我创建了我的 HTML 和图像的 DOM 表示,然后我用通过 javascript ( new Image()) 加载的图像替换了所有图像,它们立即显示。

于 2013-06-14T13:59:35.200 回答