Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 应该使用哪种缓存策略?_Ios_Swift_Nsurlrequestcachepolicy - Fatal编程技术网

Ios 应该使用哪种缓存策略?

Ios 应该使用哪种缓存策略?,ios,swift,nsurlrequestcachepolicy,Ios,Swift,Nsurlrequestcachepolicy,我的数据是从JSON API检索的,数据每天都会发生变化。目前,我正在使用reloadIgnoringLocalCacheDatanow,它忽略缓存数据并始终从原始源检索数据 我的问题是,我是否可以首先将缓存与原始缓存进行比较,如果它们不相等,则从服务器检索数据,否则使用缓存数据。或者为缓存设置过期时间,如何实现 private var session: URLSession = { let config = URLSessionConfiguration.default

我的数据是从JSON API检索的,数据每天都会发生变化。目前,我正在使用
reloadIgnoringLocalCacheData
now,它忽略缓存数据并始终从原始源检索数据

我的问题是,我是否可以首先将缓存与原始缓存进行比较,如果它们不相等,则从服务器检索数据,否则使用缓存数据。或者为缓存设置过期时间,如何实现

private var session: URLSession = {
        let config = URLSessionConfiguration.default
        config.urlCache = URLCache.shared
        config.waitsForConnectivity = true
        config.requestCachePolicy = .reloadIgnoringLocalCacheData
        return URLSession(configuration: config, delegate: nil, delegateQueue: nil)
    }()

JSON API应该设置HTTP到期头。使用CURL或Charles等检查返回的响应。如果未设置到期头,则可以通过跟踪和检查上次检索的时间来实现自己的到期。假设,根据您声明的规则,如果昨天检索到本地数据,则需要重新获取today@Dale,谢谢你的回复,我在Charles和API网站上查过了,回复中没有过期标题。那么我现在就可以定义我自己的到期规则了?但在这种情况下,我应该使用哪种缓存策略?
    public enum CachePolicy : UInt {


        case useProtocolCachePolicy


        case reloadIgnoringLocalCacheData

        case reloadIgnoringLocalAndRemoteCacheData

        public static var reloadIgnoringCacheData: NSURLRequest.CachePolicy { get }


        case returnCacheDataElseLoad

        case returnCacheDataDontLoad


        case reloadRevalidatingCacheData
    }