iOS AFN和原生网络请求短时间访问同一接口返回数据相同

是因为NSURLRequest的默认缓存机制,需将NSURLRequest的cachePolicy属性来设置请求的缓存策略。
iOS对NSURLRequest提供了7种缓存策略:(实际上能用的只有4种)

NSURLRequestUseProtocolCachePolicy  // 默认的缓存策略(取决于协议)
NSURLRequestReloadIgnoringLocalCacheData  // 忽略缓存,重新请求
NSURLRequestReloadIgnoringLocalAndRemoteCacheData  // 未实现
NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData  // 忽略缓存,重新请求
NSURLRequestReturnCacheDataElseLoad  // 有缓存就用缓存,没有缓存就重新请求
NSURLRequestReturnCacheDataDontLoad  // 有缓存就用缓存,没有缓存就不发请求,当做请求出错处理(用于离线模式)
NSURLRequestReloadRevalidatingCacheData  // 未实现

AFN中找到AFURLRequestSerialization.m文件 找到

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
                                 URLString:(NSString *)URLString
                                parameters:(id)parameters
                                     error:(NSError *__autoreleasing *)error 

加上

[mutableRequest setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];

最终代码

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
                                 URLString:(NSString *)URLString
                                parameters:(id)parameters
                                     error:(NSError *__autoreleasing *)error
{
    NSParameterAssert(method);
    NSParameterAssert(URLString);

    NSURL *url = [NSURL URLWithString:URLString];

    NSParameterAssert(url);

    NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url];
    mutableRequest.HTTPMethod = method;
    [mutableRequest setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];

    for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) {
        if ([self.mutableObservedChangedKeyPaths containsObject:keyPath]) {
            [mutableRequest setValue:[self valueForKeyPath:keyPath] forKey:keyPath];
        }
    }

    mutableRequest = [[self requestBySerializingRequest:mutableRequest withParameters:parameters error:error] mutableCopy];

    return mutableRequest;
}

你可能感兴趣的:(iOS AFN和原生网络请求短时间访问同一接口返回数据相同)