如何禁用MKNetworkKit或MKNetworkEngine中的缓存?

Pro*_*ber 2 iphone networking ipad ios mknetworkengine

我正在尝试使用MKNetworkEngine,但标题谈论缓存.这对我的应用程序来说是完全不好的,它需要下载货币汇率JSON文件和缓存是不行的.

有没有办法为整个MKNetworkEngine实例关闭缓存?

Jen*_*ohl 6

首先要做的事情:你真的确定你的缓存用例吗?大多数提供Web服务的股票将其Cache-Pragma/ETags标头设置为合理的值.如果他们这样做,MKNetworkKit将做正确的事情,并且只会在缓存命中时响应您的代码,如果这对您的请求有效.

尽管如此,您仍可以通过两种方法控制缓存的利用率.从MKNetworkEngine.h开始:

    /*!
 *  @abstract Enqueues your operation into the shared queue.
 *  
 *  @discussion
 *  The operation you created is enqueued to the shared queue. 
 *  When forceReload is NO, this method behaves like enqueueOperation:
 *  When forceReload is YES, No cached data will be returned even if cached data is available.
 *  @seealso
 *  enqueueOperation:
 */
-(void) enqueueOperation:(MKNetworkOperation*) operation forceReload:(BOOL) forceReload;
Run Code Online (Sandbox Code Playgroud)

调用enqeueOperation:forceReload:与forceReload组到YES会做的伎俩.像这样:

-(MKNetworkOperation *)myNetworkOperation onCompletion:(MYComplectionBlock)completionBlock onError:(MKNKErrorBlock)errorBlock {

    MKNetworkOperation *op = [self operationWithPath:kURLPath params:nil httpMethod:@"GET" ssl:NO];
    [op onCompletion:^(MKNetworkOperation *completedOperation) {
        // handle the response
        completionBlock(...)
    } onError:^(NSError *error) {
        errorBlock(error);
    }];

    [self enqueueOperation:op forceReload:YES];
    return op;  
}
Run Code Online (Sandbox Code Playgroud)

您还可以[self emptyCache]通过[self enqueueOperation:op]MKNetworkEngine子类内部之前调用来显式清空缓存(请注意这意味着清空所有请求的缓存).

-(MKNetworkOperation *)myNetworkOperation onCompletion:(MYComplectionBlock)completionBlock onError:(MKNKErrorBlock)errorBlock {

    MKNetworkOperation *op = [self operationWithPath:kURLPath params:nil httpMethod:@"GET" ssl:NO];
    [op onCompletion:^(MKNetworkOperation *completedOperation) {
        // handle the response
        completionBlock(...)
    } onError:^(NSError *error) {
        errorBlock(error);
    }];

    [self emptyCache];
    [self enqueueOperation:op];
    return op;  
}
Run Code Online (Sandbox Code Playgroud)