回答
Cacheing由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];
我第二個這個。感謝您的解決方案! – Firefly 2013-05-22 12:13:25
對於使用'AFHTTPClient',我們應該重寫'requestWithMethod:path:parameters' .Call超級方法來獲取'NSURLRequest'並說'request.cachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData;' – Yeung 2013-06-19 03:17:43
你能否修正錯誤類型的枚舉在你的代碼片段?對於沒有注意到有兩個更新的人來說,這會導致錯過。 – 2014-01-22 05:10:04
最初我找到Jason Moore的工作答案,但是最近我發現我的應用程序仍在緩存請求。我沒有使用最新的AFNetworking,所以我不知道最近的版本是否已經解決了緩存問題。
蘋果的Urlcache文件項目有這樣一段話:
默認情況下,可可URL加載系統使用一個小的共享內存 緩存。我們不需要這個緩存,因此我們在啓動 應用程序時將其設置爲零。
然後這樣做來禁用緩存。
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0
diskCapacity:0
diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];
這將禁用所有緩存爲您的整個應用程序,它可能無法在某些情況下是理想的,但NSURLRequest
沒有履行所要求的高速緩存策略,這是剩下的唯一選擇,我可以看到。
即使與AFnetworking工作 - 緩存損壞從https服務恢復下載... – PetrV 2013-07-11 22:21:22
NSURLRequest *request = [NSURLRequest requestWithURL:URL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
不幸的是,這些方法都不適用於我。我已經成功地得到禁用緩存的唯一方法是這樣:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
我有一個單身管理後臺調用。我把這兩行代碼放在init方法中,一切正常! – Zeb 2015-09-29 07:53:10
這可能取決於你的服務器上執行,但添加Cache-Control:no-store
頭外出的請求應當導致一個響應包含相同的頭部,因此命令NSURLCache
不緩存對磁盤的響應。
恕我直言,這是一種比完全禁用磁盤緩存更好的方法,特別是如果您正在編寫其他應用程序可能要使用NSURLCache
的SDK代碼。
- 1. 如何禁用AFNetworking的緩存
- 2. AFNetworking和緩存
- 3. 如何禁用緩存?
- 4. 如何禁用緩存nginx
- 5. 如何禁用緩存100%
- 6. 如何禁用SQLAlchemy緩存?
- 7. 如何禁用tomcat緩存?
- 8. 如何禁用READ_XBUF緩存?
- 9. 如何禁用nginx緩存
- 10. 如何禁用cocoapods緩存
- 11. 緩存策略,AFNetworking
- 12. 如何清除AFNetworking中的舊緩存?
- 13. 禁用AFNetworking中的特定圖像緩存
- 14. 禁用緩存
- 15. 禁用緩存
- 16. 禁用緩存
- 17. AFNetworking緩存下載文件
- 18. AFNetworking不緩存HTTPS請求
- 19. AFNetworking 2.0緩存問題
- 20. 如何使用JavaScript禁用Firefox緩存?
- 21. 使用AFNetworking 2.0管理緩存圖像
- 22. 緩存使用AFNetworking的大圖
- 23. OpenCart 1.5:如何禁用SVG緩存?
- 24. Sammy.js如何禁用緩存模板html?
- 25. 如何禁用Vapor中的緩存?
- 26. 如何禁用Liferay portlet緩存?
- 27. 如何禁用IE9中的緩存?
- 28. 如何在php中禁用緩存
- 29. 如何禁用liferay中的緩存?
- 30. 如何禁用Django查詢緩存?
有什麼辦法可以禁用它嗎?無論如何,我真的需要這個,因爲我的緩存系統有點不正統。這是一個真正的必須禁用緩存。 – 2012-04-08 19:34:26
默認關閉。您必須通過創建一個「NSURLCache」並將其設置爲共享緩存來選擇加入。 – mattt 2012-04-08 19:52:14
它已經?目前看起來它會爲您自動生成。 https://github.com/AFNetworking/AFNetworking/blob/experimental-1.0RC1/AFNetworking/UIImageView%2BAFNetworking.m#L70 – steipete 2012-04-08 22:23:06