【问题标题】:Implementing NSURLRequest, NSURLConnection and NSURLRequestReturnCacheDataElseLoad policy实现 NSURLRequest、NSURLConnection 和 NSURLRequestReturnCacheDataElseLoad 策略
【发布时间】:2011-01-21 21:43:00
【问题描述】:

谁有使用 NSURLRequest、NSURLConnection 和 NSURLRequestReturnCacheDataElseLoad 策略实现图像缓存的示例代码?

我正在使用以下代码,但似乎没有发生缓存。我一直从 URL 获取图像。请告诉我这里出了什么问题:

NSMutableURLRequest *req=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://i54.tinypic.com/10pd2jk.png"]];
    NSData *data=[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil];
    NSLog(@"Received %d bytes", [data length]);
    [req setCachePolicy:NSURLRequestReturnCacheDataElseLoad];
    data=[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil];
    NSLog(@"Received %d bytes", [data length]);
    [[NSURLCache sharedURLCache] setMemoryCapacity:1024*1024*10];


    UIImage *myImage = [UIImage imageWithData:data];
    UIImageView *sd = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 50, 50)];
    sd.image = myImage;
    [self.view addSubview:sd];

【问题讨论】:

  • 我也有同样的问题。 SDURLCache 似乎是要走的路,但文档中提供的示例代码 sn-p 理想情况下会更完整。我也没有观察到任何缓存。当我加载视图时,我说的是 [self getImage];我假设通过使用 SDURLCache,我不需要做任何其他事情。还是我需要手动保留“最后修改”时间,然后从共享缓存中读取?如果是这样,这不会节省我的时间,因为我最终会以手动方式实现缓存。

标签: iphone cocoa nsurlconnection nsurlrequest


【解决方案1】:

您可能想看看使用 SDURLCache:https://github.com/rs/SDURLCache

SDURLCache 实际上将缓存保存到磁盘,而 NSURLCache 没有。 NSURLCache 只缓存在内存中,所以在你的应用会话中。请参阅链接中的自述文件,该链接对其进行了更详细的解释。

更新:看起来 NSURLCache 从 iOS 5.x 开始缓存到磁盘:http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/

【讨论】:

  • 不知道为什么我投了反对票。 SDURLCache 实际上将缓存保存到磁盘,而 NSURLCache 没有。 NSURLCache 只缓存在内存中,所以在你的应用会话中。 (我最近还没有证实这一点,但我很确定情况仍然如此。)
  • 反对票是我的。我正在寻找使用 NSURLCache 的示例代码,就像问题状态一样。 SDURLCache 对我没有任何用处,因为我使用的是 Mono。但是您的评论完美地解释了为什么 NSURLCache 无济于事,因此,如果您将其包含在答案中,我很乐意删除反对票。抱歉我没有早点评论,我当时有点着急:)
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多