代码之家  ›  专栏  ›  技术社区  ›  Tobi Nary Ramesh

iPhone:磁盘上的nsurlcache

  •  2
  • Tobi Nary Ramesh  · 技术社区  · 14 年前

    我无法将URL响应缓存到磁盘。我希望这样做,因为我下载的数据需要在满足HTTP头中的expires标记时重新加载,而不是更早。此外,我希望iPod touch用户能够在线下载数据一次,然后离线使用。

    我这样做对在内存中缓存东西很好,但在重新启动应用程序时失败:

    NSURLRequest* menuRequest = [NSURLRequest requestWithURL:mensaURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval: 10];
    NSCachedURLResponse* cachedMenuResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:menuRequest];
    if (cachedMenuResponse) {
        // received data is a member of that class to which the asynchronous 
        // download writes and which is then being used in updateDataFromDownload
        // to retrieve my data structure from the download.
        self.receivedData = [NSMutableData dataWithData:[cachedMenuResponse data]];
        [self updateDataFromDownload];
        NSLog(@"using data from cache");
    } else {
        NSLog(@"opening connection");
        [NSURLConnection connectionWithRequest:menuRequest delegate:self];
    }
    
    2 回复  |  直到 10 年前
        1
  •  5
  •   Ricardo Sanchez-Saez    10 年前

    afaik nsurlrequest/nsurlconnection支持从iOS 5缓存到磁盘。

    更新 :@rob在评论中正确陈述:

    我发现,如果(a)使用 nsurlRequestUseProtocolCachePolicy;和(b)响应没有 包括缓存控制头,它不会缓存到磁盘。如果你使用 nsurlRequestReturnCacheDataElsLoad的缓存策略,或者如果响应 从服务器指定特定的缓存控制头(例如 public,max age=1835400),将缓存到持久存储。

        2
  •  3
  •   vdaubry    13 年前

    SDURLCache 是用于磁盘缓存的nsurlcache的一个子类,非常注重性能。

    希望这有帮助, 文森特