2013-05-02 50 views
2

我在App Delegate中配置了一個內存和磁盤緩存,但似乎並沒有使用緩存 - 它似乎每次都進入網絡。有沒有簡單的方法來檢查數據是否被緩存,然後在後續請求中檢索?我需要設置緩存嗎?我是否需要通過每次調用cachedResponseForRequest或類似的東西來顯式檢查緩存?它在模擬器上工作嗎?我的部署目標是iOS 6.如何判斷NSURLCache是​​否正常工作?

謝謝。

回答

4

幾個觀察:

  1. 請求必須是一個可被高速緩存(例如httphttps,但不是ftp)。

  2. 響應必須生成指示響應可以被緩存的標頭。值得注意的是,它必須設置Cache-Control。請參閱NSHipster對NSURLCache的討論。

    例如,下載的圖像時

    <?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]; 
    

    這將5MB的內存緩存和20MB的持久性高速緩存。

  4. 爲了完整起見,我將創建NSURLRequest時狀態明顯,即,中NSURLRequestReloadIgnoringLocalCacheData一個NSURLRequestCachePolicy將防止緩存即使響應先前被緩存使用。

  5. 在陳述明顯的同一類別中,返回nilconnection:willCacheResponse:方法將阻止響應被緩存。

相關問題