【问题标题】:NSURLRequest Cache PolicyNSURLRequest 缓存策略
【发布时间】:2012-04-20 16:49:59
【问题描述】:

我正在使用 NSURLRequest 和 CachePolicy 来下载 NSData 中的 plist。当我更改我的 plist 的内容时,我的应用程序会忽略这一点,但仍会显示缓存的内容。缓存会持续多久?如果是这样,是否可以选择说明缓存数据持续多长时间? 如果服务器上的数据比缓存更新,是否可以检查 NSURLRequest 从服务器加载数据,或者是否等于缓存使用缓存?

【问题讨论】:

    标签: ios caching ios5 nsurlrequest


    【解决方案1】:

    查看URLLoadingSystem docs 中的控制响应缓存。

    您可以在委托方法中添加自己的日期

    -(NSCachedURLResponse *)connection:(NSURLConnection *)connection
                     willCacheResponse:(NSCachedURLResponse *)cachedResponse
    

    使用缓存系统更简单的是ASIHTTPRequest。我推荐使用这个 URL 加载系统。

    来自苹果文档:

    清单 6 中的示例阻止了 https 响应的缓存。它 还将当前日期添加到用户信息字典以进行响应 缓存。

    -(NSCachedURLResponse *)connection:(NSURLConnection *)connection
                     willCacheResponse:(NSCachedURLResponse *)cachedResponse
    {
        NSCachedURLResponse *newCachedResponse = cachedResponse;
    
        if ([[[[cachedResponse response] URL] scheme] isEqual:@"https"]) {
            newCachedResponse = nil;
        } else {
            NSDictionary *newUserInfo;
            newUserInfo = [NSDictionary dictionaryWithObject:[NSCalendarDate date]
                                                     forKey:@"Cached Date"];
            newCachedResponse = [[[NSCachedURLResponse alloc]
                                    initWithResponse:[cachedResponse response]
                                        data:[cachedResponse data]
                                        userInfo:newUserInfo
                                        storagePolicy:[cachedResponse storagePolicy]]
                                autorelease];
        }
        return newCachedResponse;
    }
    

    【讨论】:

    • 谢谢。我现在将其设置为零。但是如何让缓存停留一段时间或检查服务器是否有更新的数据可用?
    • iOS 6.1 SDK 文档说明如下: connection:willCacheResponse:在连接将缓存的响应存储在缓存中之前发送,以便让代理有机会更改它。 (必需)(在 iOS 2.0 到 iOS 4.3 中可用。)
    猜你喜欢
    • 1970-01-01
    • 2010-10-06
    • 2012-09-05
    • 2020-08-03
    • 2011-11-12
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多