2012-09-21 19 views

回答

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; 

調用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; 
} 
+0

我在做forceReload:YES,它仍然只從緩存中獲取結果。 當我這樣做: if([op isCachedResponse])[self sendRequestAgain]; 它每次都給我緩存的數據。 –

+0

也許你背後是某種透明的高速緩存代理? –