2013-05-02 2 views
2

내 App Delegate에서 메모리 및 디스크 캐시를 구성했지만 캐시가 사용중인 것 같지 않습니다. 매번 네트워크에있는 것으로 보입니다. 데이터가 캐시되고 이후 요청에서 검색되는지 쉽게 확인할 수 있습니까? 캐시를 설정하고 있습니까? 매번 또는 그와 비슷한 cachedResponseForRequest를 호출하여 캐시를 명시 적으로 검사해야합니까? 그것은 시뮬레이터에서 작동합니까? 내 배포 대상은 iOS 6입니다.NSURLCache가 작동하는지 어떻게 알 수 있습니까?

감사합니다.

답변

4

관찰의 커플 : 요청이 캐시 할 수있는 하나 (예를 들어, http 또는 https 있지만 ftp)해야합니다

  1. .

  2. 응답은 응답을 캐시 할 수 있음을 나타내는 헤더를 생성해야합니다. 특히, Cache-Control으로 설정해야합니다. NSURLCache에 대한 NSHipster의 토론을 참조하십시오. 예를 들어

    , 불완전하게 기록 룰을 만족해야하는 화상을

    <?php 
    
    $filename = "image.jpg"; 
    
    $lastModified = filemtime($filename); 
    $etagFile = md5_file($filename); 
    
    header('Last-Modified: ' . gmdate("D, d M Y H:i:s", $lastModified) . ' GMT'); 
    header('Etag: "' . $etagFile . '"'); 
    header('Content-Type: image/jpeg'); 
    header('Cache-Control: public, max-age=1835400'); 
    header('Content-Length: ' . filesize($filename)); 
    
    readfile($filename); 
    
    ?> 
    
  3. 다운로드 응답 (예를 들어, 응답은 총 지속 NSURLCache의 5 %를 초과 할 수 없다). 예를 들어, 다음 사항을 배치 할 수 있습니다 응용 프로그램의 대리인의 didFinishLaunchingWithOptions :

    NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity: 5 * 1024 * 1024 
                    diskCapacity:20 * 1024 * 1024 diskPath:nil]; 
    [NSURLCache setSharedURLCache:URLCache]; 
    

    5메가바이트의 메모리 캐시와 20메가바이트의 지속적인 캐시를 설정합니다. NSURLRequest를 만들 때

    완성도를 위해서
  4. , 나는 NSURLRequestReloadIgnoringLocalCacheDataNSURLRequestCachePolicy는 응답이 이전에 캐시 된 경우에도 사용되는 캐시를 방해하는, 즉, 명백한 상태 것이다.

  5. nil을 반환하는 connection:willCacheResponse: 메서드가 같은 범주에 속하면 응답이 캐시되지 않습니다.

관련 문제