【问题标题】:iOS Cache PolicyiOS 缓存策略
【发布时间】:2012-09-05 02:36:02
【问题描述】:

我正在连接到 NSURL,我需要创建一个绕过所有缓存策略的请求。我见过这样的例子:

NSURLRequest *request = [NSURLRequest requestWithURL:baseURL cachePolicy:0 timeoutInterval:10];
self.urlConnection = [[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];

请问缓存策略0指的是什么?尝试搜索数字代表什么,但我没有得到任何我需要的答案。谢谢! :)

【问题讨论】:

    标签: iphone ios caching nsurlconnection httprequest


    【解决方案1】:

    你应该看看 NSURLRequestCachePolicy 枚举,这里的 0 表示 NSURLRequestUseProtocolCachePolicy,这意味着 NSURLRequest 不会每次都从服务器加载数据。

    enum
    {
       NSURLRequestUseProtocolCachePolicy = 0,
       NSURLRequestReloadIgnoringLocalCacheData = 1,
       NSURLRequestReloadIgnoringLocalAndRemoteCacheData =4,
       NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
       NSURLRequestReturnCacheDataElseLoad = 2,
       NSURLRequestReturnCacheDataDontLoad = 3,
       NSURLRequestReloadRevalidatingCacheData = 5
    };
    typedef NSUInteger NSURLRequestCachePolicy
    

    【讨论】:

    • 我认为如果缓存过期,它会从服务器加载数据,或者重新验证检测数据更改
    【解决方案2】:

    https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLRequest_Class/Reference/Reference.html

    NSURLRequestUseProtocolCachePolicy = 0

    指定协议中定义的缓存逻辑 实现(如果有)用于特定的 URL 加载请求。 这是 URL 加载请求的默认策略。

    示例:如果您使用 HTTP,将评估 HTTP-Header 字段以确定是否应使用缓存。

    在您的情况下正确的政策是:

    NSURLRequestReloadIgnoringLocalCacheData

    【讨论】:

      【解决方案3】:

      根据这篇文章:http://blackpixel.com/blog/2012/05/caching-and-nsurlconnection.html ,如果您使用的是 NSURLRequestUseProtocolCachePolicy 并且服务器没有返回过期或 max-age,则默认缓存时间间隔为 6 - 24 小时。所以要小心这种情况。使用 NSURLRequestUseProtocolCachePolicy 时最好设置 max-age 或 expire。

      【讨论】:

        猜你喜欢
        • 2017-04-06
        • 2013-11-15
        • 2010-10-06
        • 2020-08-03
        • 2011-11-12
        • 2011-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多