[英]How To Disable AFNetworking Cache
是否可以禁用AFNetworking的所有緩存功能?
我正在構建自己的自定義緩存系統,並且不希望這也占用磁盤空間。
謝謝,阿什利
最初我找到了Jason Moore的工作答案,但最近我注意到我的應用程序仍在緩存請求。 我沒有使用最新的AFNetworking,所以我不知道在最近的版本中是否已經解決了緩存問題。
Apple的URLCache項目有這樣的說法:
默認情況下,Cocoa URL加載系統使用小型共享內存緩存。 我們不需要此緩存,因此我們在應用程序啟動時將其設置為零。
然后執行此操作以禁用緩存。
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0
diskCapacity:0
diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];
這將禁用整個應用程序的所有緩存,這在某些情況下可能並不理想,但由於NSURLRequest
未遵循請求的緩存策略,因此它是我能看到的唯一選項。
緩存由NSURLCache
應用程序范圍內處理。 如果未設置共享緩存,則不會緩存請求。 即使使用共享的NSURLCache
,iOS上的默認實現也不支持磁盤緩存。
也就是說,除非你有一個非常特別的理由來編寫自己的緩存系統,否則我強烈建議不要這樣做。 NSURLCache
足以滿足99.9%的應用程序:它處理來自傳入響應的緩存指令,並在新請求中適當地使用它們,並以一種不太可能成為應用程序性能瓶頸的方式自動執行。 作為一個浪費了無數個小時自己制作一個人的人( 之后因為完全沒必要而扔掉它 ),我會說有更好的地方可以集中你的發展注意力。
我在iOS 6上發現,即使請求有NSURLRequestReloadIgnoringCacheData
,有時也會緩存請求。 添加返回nil
的緩存響應塊可防止緩存請求。
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:20];
AFJSONRequestOperation *op =
[AFJSONRequestOperation JSONRequestOperationWithRequest:request];
// DISABLE CACHE //
[op setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) {
return nil;
}];
[op start];
不幸的是,這些方法都不適用於我。 我設法禁用緩存的唯一方法就是這樣:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
NSURLRequest *request = [NSURLRequest requestWithURL:URL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
這可能取決於您的服務器實現,但是向您的傳出請求添加Cache-Control:no-store
標頭應該會產生包含相同標頭的響應,從而命令NSURLCache
不將響應緩存到磁盤。
恕我直言,這是一種比完全禁用磁盤緩存更好的方法,特別是如果您正在編寫將由其他可能想要使用NSURLCache
應用程序使用的SDK代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.