ios - 奇怪的NSURLConnection缓存行为

标签 ios objective-c nsurlconnection nsurlrequest nsurlcache

我有一个简单的方法,它需要一个url并从服务器加载它:

- (void)loadURL:(NSString*)url
{
    NSMutableURLRequest* request = [[NSMutableURLRequest alloc] init];
    request.HTTPMethod = @"GET";
    request.URL = [NSURL URLWithString:url];

    NSHTTPURLResponse* response;
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
}

服务器返回最长1天的响应。

问题是,当我重复运行这3行时,其中2条随机丢失高速缓存并重新加载响应:
[self loadURL:@"http://192.168.0.105:8080/users/51bdbc73808897302f000001/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09RoyipmXgcENwfE6EV9yzvgp5VTSZww"];
[self loadURL:@"http://192.168.0.105:8080/users/51ee9d4e263d08fe04000003/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09RoyipmXgcENwfE6EV9yzvgp5VTSZww"];
[self loadURL:@"http://192.168.0.105:8080/users/51d17b81de38c60b20000006/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09RoyipmXgcENwfE6EV9yzvgp5VTSZww"];

如果我在每个请求的查询字符串中添加一些随机的唯一数据(&x,&y,&z),则可以解决此问题:
[self loadURL:@"http://192.168.0.105:8080/users/51bdbc73808897302f000001/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09RoyipmXgcENwfE6EV9yzvgp5VTSZww&x"];
[self loadURL:@"http://192.168.0.105:8080/users/51ee9d4e263d08fe04000003/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09RoyipmXgcENwfE6EV9yzvgp5VTSZww&y"];
[self loadURL:@"http://192.168.0.105:8080/users/51d17b81de38c60b20000006/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09RoyipmXgcENwfE6EV9yzvgp5VTSZww&z"];

另外,如果我将查询字符串的长度减少到80个字符,它也可以解决此问题:
[self loadURL:@"http://192.168.0.105:8080/users/51bdbc73808897302f000001/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09Royipm"];
[self loadURL:@"http://192.168.0.105:8080/users/51ee9d4e263d08fe04000003/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09Royipm"];
[self loadURL:@"http://192.168.0.105:8080/users/51d17b81de38c60b20000006/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09Royipm"];

这是怎么回事?
这是iOS中的错误吗?我该如何解决?

附注:我已经在一个空的应用程序中对此进行了测试,并且在iOS 5和6上都没有多余的东西。

最佳答案

使用NSURLRequestrequestWithURL:cachePolicy:timeoutInterval:中设置缓存行为。尝试:

- (void)loadURL:(NSString*)url
{
    NSURL *url = [NSURL URLWithString:url];
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy: NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10.0];

    NSHTTPURLResponse* response;
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
}

也可以将NSURLRequestReloadIgnoringLocalAndRemoteCacheData用作cachePolicy

关于ios - 奇怪的NSURLConnection缓存行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17895694/

相关文章:

ios - 错误信息 : [MC] Reading from public effective user settings & [MC] System group container for systemgroup. com.apple.configurationprofiles 路径是

iOS:UISegmentedControl VS UITabBarController

android - 在 Flutter 上 iOS 和 Android 的 bundle-Identifiers 可以不同吗?

ios - 如何在 NSString 中获取单词或音节的索引

objective-c - Objective C 中方法参数的 __block?

ios - NSFetchedController 和部分

ios - 主从接口(interface)的核心数据实体设计

ios - 使用 faSTLane 运行 xcov 时无法找到任何 .xccoverage 文件

iphone - iPhone 的 SSL 证书 -> 哪个 CA?

ios - 获取大小文件NSURLConnection?