2
我正在嘗試使用MKNetworkEngine,但標題討論緩存。這對我的應用程序來說是非常糟糕的,因爲它需要下載貨幣兌換率JSON文件,而緩存是不可行的。如何禁用MKNetworkKit或MKNetworkEngine中的緩存?
有沒有辦法爲整個MKNetworkEngine實例關閉緩存?
我正在嘗試使用MKNetworkEngine,但標題討論緩存。這對我的應用程序來說是非常糟糕的,因爲它需要下載貨幣兌換率JSON文件,而緩存是不可行的。如何禁用MKNetworkKit或MKNetworkEngine中的緩存?
有沒有辦法爲整個MKNetworkEngine實例關閉緩存?
首先要做的事情是:你真的肯定你的緩存用例嗎?大多數提供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;
調用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;
}
進一步可以明確地清空緩存(注意,這意味着排空所有請求緩存)一起[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;
}
我在做forceReload:YES,它仍然只從緩存中獲取結果。 當我這樣做: if([op isCachedResponse])[self sendRequestAgain]; 它每次都給我緩存的數據。 –
也許你背後是某種透明的高速緩存代理? –