2012-09-21 1 views

답변

6

가장 먼저 할 일 : 은 실제로 캐싱 유스 케이스에 대해 확실합니까? 웹 서비스를 제공하는 대부분의 주식은 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; 

forceReload와 enqeueOperation: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; 
} 

이 더욱 더 명시 적으로 캐시를 비우 당신의 MKNetworkEngine 서브 클래스의 내부 단지 [self enqueueOperation:op] 전에 [self emptyCache]를 호출 (즉, 모든 요청에 ​​대한 캐시를 비우는 의미 조심) 할 수 있습니다.

-(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 : 예를 수행 중이지만 여전히 캐시에서 결과 만 가져옵니다. 언제 이렇게합니까? if ([op isCachedResponse]) [self sendRequestAgain]; 매번 캐시 된 데이터를 제공합니다. –

+0

아마도 투명 캐시 프록시의 일종일까요? –