tags:

views:

1158

answers:

3

I notice that the iphone safari caches content so that your page load for later is much faster much like a desktop browser. So take mobile gmail web page for example, the first load is quite slow (5-10 secondS). But if I close the tab and reopen the page again, it's very quick (1 second).

However, this behavior is not the same if you load the content through a UIWebView in your app. Am I missing some settings? How do I make the UIWebView cache the content automatically without going through the hassle of saving the content myself?

A: 

Based on this discussion thread it would appear there isn't any OS-level caching possible with UIWebView. Based on experience I've noticed that Safari on my iPhone OS device doesn't cache its web pages (e.g., hitting the back button in Safari does not reload the old page from a cache).

fbrereto
+1  A: 

The key is: 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];
zaph
A: 

I've done a couple of apps that cache pages to the Documents folder, then compare the time-stamps of the cached & web pages before loading the new web page. So the basic flow is:

if (fileIsInCache)
    if (cacheFileDate > webFileDate)
        getCachedFile
    else
        getFileFromWeb
        saveFileToCache
else
    getFileFromWeb
    saveFileToCache

stuffFileIntoUIView

maybeReduceCache

You still have to hit the web to get the headers, but that's typically much faster than downloading a whole page/image/file.

Olie
Do you have some sample code of this?
Tudorizer