如何在UIWebView中缓存内容以便以后更快地加载?

ero*_*ppa 23 html iphone objective-c ios

我注意到iphone safari会缓存内容,以便以后加载页面的速度比桌面浏览器快得多.所以以移动gmail网页为例,第一次加载很慢(5-10秒).但如果我关闭标签并再次重新打开页面,则会非常快(1秒).

但是,如果通过应用程序中的UIWebView加载内容,则此行为不一样.我错过了一些设置吗?如何让UIWebView自动缓存内容而无需自己保存内容的麻烦?

zap*_*aph 23

关键是: NSURLRequestReturnCacheDataElseLoad

NSData *urlData;
NSString *baseURLString =  @"mysite.com";
NSString *urlString = [baseURLString stringByAppendingPathComponent:@"myfile"];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval: 10.0]; 
NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:nil]; 

if (connection)
{ 
    urlData = [NSURLConnection sendSynchronousRequest: request];

    NSString *htmlString = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
    [webView loadHTMLString:htmlString baseURL:baseURLString];
    [htmlString release];
}

[connection release];
Run Code Online (Sandbox Code Playgroud)

  • iOS文档说NSURLRequestReturnCacheDataElseLoad"指定应该使用现有的缓存数据来满足请求,无论其年龄或到期日期如何." 这通常不是你想要的,因为它忽略了像max-age这样的缓存策略头.所以这听起来不是一个好的一般答案.看似最好的选择是"NSURLRequestUseProtocolCachePolicy",但这似乎什么都不做. (9认同)

fbr*_*eto 2

基于这个讨论线程,似乎没有任何操作系统级缓存可能与UIWebView. 根据经验,我注意到 iPhone OS 设备上的 Safari 不会缓存其网页(例如,点击 Safari 中的后退按钮不会从缓存中重新加载旧页面)。