【问题标题】:NSURLCache not caching urlNSURLCache 不缓存 url
【发布时间】:2014-09-27 12:00:22
【问题描述】:

我像这样创建 url,它是在后台线程中调用的函数的一部分。

  NSURL *url = [NSURL URLWithString:urlString];
  NSData *pageData = [NSData dataWithContentsOfURL:url];

当我尝试缓存它时

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024
                                                         diskCapacity:20 * 1024 * 1024
                                                             diskPath:nil];
    [NSURLCache setSharedURLCache:URLCache];
}

但是,如果我打开应用程序,将其关闭,然后再次尝试打开,应用程序的加载时间相同,并且速度没有明显改善。我想知道缓存是否存在 iOS 限制,或者我是否错误地实现了代码。

【问题讨论】:

    标签: ios objective-c caching nsurlconnection


    【解决方案1】:

    您是否在请求中包含正确的电子标签?您的服务器返回 200 还是 304?

    为了知道缓存的数据可以使用,服务器需要表明它没有改变。

    【讨论】:

    • 这是我必须 NSLog 到控制台检查的东西吗?
    • 如果您拥有您正在访问的服务器,那么检查您的服务器日志将是最容易的。如果不是并且您确实需要缓存行为,我建议您将 AFNetworking 库用于您的网络请求,以便您可以看到 HTTP 请求参数(包括 eTag 和响应状态代码)
    • 使用 NSFileManager 或 NSUserDefaults 手动存储 url 会不会更麻烦?
    • 我不会将它们存储在用户默认值中。 NSData 有一个 writeToFile: 方法,您可以使用它自己将其缓存在磁盘上。不过,要获得 HTTP 缓存的通用解决方案,我认为您最好将 HTTP 请求移至 AFNetworking。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2013-09-05
    • 1970-01-01
    • 2011-10-11
    • 2016-12-08
    • 2014-03-24
    • 1970-01-01
    相关资源
    最近更新 更多