簡體   English   中英

如何禁用AFNetworking緩存

[英]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.

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