MKNetworkEngine을 사용하려고하는데 헤더가 캐싱에 대해 이야기합니다. 이것은 외환 환율 JSON 파일을 다운로드해야하고 내 캐싱이 필요없는 앱에 전혀 문제가되지 않습니다.MKNetworkKit 또는 MKNetworkEngine에서 캐싱을 비활성화하는 방법은 무엇입니까?
전체 MKNetworkEngine 인스턴스에 대해 캐싱을 해제 할 수있는 방법이 있습니까?
MKNetworkEngine을 사용하려고하는데 헤더가 캐싱에 대해 이야기합니다. 이것은 외환 환율 JSON 파일을 다운로드해야하고 내 캐싱이 필요없는 앱에 전혀 문제가되지 않습니다.MKNetworkKit 또는 MKNetworkEngine에서 캐싱을 비활성화하는 방법은 무엇입니까?
전체 MKNetworkEngine 인스턴스에 대해 캐싱을 해제 할 수있는 방법이 있습니까?
가장 먼저 할 일 : 은 실제로 캐싱 유스 케이스에 대해 확실합니까? 웹 서비스를 제공하는 대부분의 주식은 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;
}
forceReload : 예를 수행 중이지만 여전히 캐시에서 결과 만 가져옵니다. 언제 이렇게합니까? if ([op isCachedResponse]) [self sendRequestAgain]; 매번 캐시 된 데이터를 제공합니다. –
아마도 투명 캐시 프록시의 일종일까요? –