我在App Delegate中配置了一個內存和磁盤緩存,但似乎並沒有使用緩存 - 它似乎每次都進入網絡。有沒有簡單的方法來檢查數據是否被緩存,然後在後續請求中檢索?我需要設置緩存嗎?我是否需要通過每次調用cachedResponseForRequest或類似的東西來顯式檢查緩存?它在模擬器上工作嗎?我的部署目標是iOS 6.如何判斷NSURLCache是否正常工作?
謝謝。
我在App Delegate中配置了一個內存和磁盤緩存,但似乎並沒有使用緩存 - 它似乎每次都進入網絡。有沒有簡單的方法來檢查數據是否被緩存,然後在後續請求中檢索?我需要設置緩存嗎?我是否需要通過每次調用cachedResponseForRequest或類似的東西來顯式檢查緩存?它在模擬器上工作嗎?我的部署目標是iOS 6.如何判斷NSURLCache是否正常工作?
謝謝。
幾個觀察:
請求必須是一個可被高速緩存(例如http
或https
,但不是ftp
)。
響應必須生成指示響應可以被緩存的標頭。值得注意的是,它必須設置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);
?>
的反應必須滿足一些不良記錄規則(例如,響應可以不超過總持續NSURLCache
的5%)。例如,你可以把下面的應用程序委託的didFinishLaunchingWithOptions
:
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity: 5 * 1024 * 1024
diskCapacity:20 * 1024 * 1024 diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];
這將5MB的內存緩存和20MB的持久性高速緩存。
爲了完整起見,我將創建NSURLRequest
時狀態明顯,即,中NSURLRequestReloadIgnoringLocalCacheData
一個NSURLRequestCachePolicy
將防止緩存即使響應先前被緩存使用。
在陳述明顯的同一類別中,返回nil
的connection:willCacheResponse:
方法將阻止響應被緩存。