网络请求被保存在内存中?

时间:2017-10-27 16:34:29

标签: ios swift caching

这必须是我遇到的最奇怪的事情之一......

使用alamofire的简单网络请求

    manager.request(PostRouter.readPosts(pn: pn)).validate().responseJSON {
        response in
        switch response.result {
        case .success(let json):
            if let json = json as? JSON,
                let postsArray = json["posts"] as? [JSON],
                let posts = Post.build(from: postsArray) {
                completion(posts, nil)
            }
            else {
                completion(nil, NetworkingError.jsonParsingError)
            }
        case .failure(let error):
            completion(nil, error)
        }
    }

无论是从模拟器还是移动设备运行,都会发生同样的事情。

  1. 以飞行模式提出请求 - >没有网络连接的错误。
  2. 再次使用互联网提出请求 - >加载帖子
  3. 在飞机模式下再次提出请求 - >加载没有互联网的帖子返回具有json值的成功案例。
  4. 即使在步骤3中我通过互联网连接发出请求并且已经在步骤2和3之间修改了数据的值,它仍将从步骤2返回完全相同的数据而不是获取新数据。它几乎就像整个请求一样,包括将数据保存在内存中。

    我实际上可以实现获取新数据的新请求的唯一方法是将其从手机中删除并重新安装。然后问题重演。

    这发生在我从应用程序发出的所有请求中。此外,该问题与Alamofire无关,因为如果没有它,问题仍然会发生

1 个答案:

答案 0 :(得分:1)

这可能不是问题,而是一个功能。 Foundation将自动缓存响应。如果服务器启用了缓存,请检查响应的缓存标头(如ExpiresCache-ControlETag等)。