簡體   English   中英

NSURLCache不起作用

[英]NSURLCache doesn't work

我在應用程序委托中初始化了NSURLCache,如下所示:

int cacheSizeMemory = 4*1024*1024;  // 4MB
int cacheSizeDisk   = 32*1024*1024; // 32MB
MyServerCache *sharedCache = [[MyServerCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"];
[MyServerCache setSharedURLCache:sharedCache]; 

然后,我創建一個具有默認緩存策略的請求並調用:

[NSURLConnection sendSynchronousRequest: urlRequest
                      returningResponse: &response
                                  error: pError ];

響應的類型為“ application / json”,並且“ Cache-Control”設置為“ private,max-age = 600”。 響應僅為874字節(不應太大以至於無法緩存),但是NSURLCache似乎不起作用。

我已經在模擬器上運行了它,並尋找了似乎不存在的磁盤上緩存,因此我將NSURLCache(MyServerCache)子類化,並覆蓋以下方法以查看它們是否被調用:

-(NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request
{
  NSLog(@"Returning cached response for request:  %@", request);
  return [super cachedResponseForRequest:request];
}

-(void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request
{
  NSLog(@"Caching response for request: %@", request);
  [super storeCachedResponse:cachedResponse forRequest:request];
}

無論我做什么(我已經嘗試了幾種不同的API和響應),NSURLCache似乎都從不緩存任何內容。 我無法在文件系統中找到磁盤上的緩存,並且從未在我的NSURLCache(MyServerCache)的子類上調用上述方法。

我真的很想使用它而不是滾動自己的緩存,但是我不知道為什么它不起作用或如何使其起作用。 請幫忙。

您必須使用NSURLRequestUseProtocolCachePolicy創建請求,並且該請求與NSURLCache完美兼容。

NSURLRequestCachePolicy cachePolicy = NSURLRequestUseProtocolCachePolicy;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                       cachePolicy:cachePolicy 

您可以在此處閱讀有關NSURLRequestCachePolicy的信息: https : //developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLRequest_Class/#//apple_ref/c/tdef/NSURLRequestCachePolicy

有點令人困惑的是,iOS總是返回200 - Success因此當響應來自緩存時,您將永遠不會獲得304 - Resource not Modified 因此,在監視服務器端時更容易看到緩存策略在起作用。

您可以使用https://github.com/PaulEhrhardt/Simple-Cache-Test來驗證緩存控制,過期和帶有少量本地ruby服務器的ETag。 只需幾行即可設置。 我已經成功使用7.1和8.4 iOS SDK進行了測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM