如何禁用AFNetworkingcaching
是否可以禁用AFNetworking的所有cachingfunction?
我正在构build自己的自定义caching系统,不希望它占用磁盘空间。
谢谢,阿什利
caching由NSURLCache
应用程序范围内处理。 如果您不设置共享caching,请求不会被caching。 即使使用共享的NSURLCache
,iOS上的默认实现也不支持磁盘caching。
这就是说,除非你有一个非常特别的理由来编写自己的caching系统,否则我会强烈build议不要这样做。 对于99.9%的应用程序来说, NSURLCache
已经足够了:它处理来自传入响应的caching指令,并在新的请求中正确使用caching指令,并且在应用程序中不会成为性能瓶颈。 作为一个自己浪费了不less时间的人( 后来把它扔掉了,因为这是完全没有必要的 ),我可以说有更好的地方来关注你的发展。
最初我发现杰森·摩尔的工作的答案,但是最近我注意到我的应用程序仍然caching请求。 我没有使用最新的AFNetworking,所以我不知道caching是否已经在更新的版本中解决。
苹果的URLCache项目有这样的说法:
默认情况下,Cocoa URL加载系统使用一个小的共享内存caching。 我们不需要这个caching,所以当应用程序启动时我们将其设置为零。
然后这样做来禁用caching。
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; [NSURLCache setSharedURLCache:sharedCache]; [sharedCache release];
这将禁用整个应用程序的所有caching,这在某些情况下可能并不理想,但由于NSURLRequest
不遵守所请求的caching策略,因此这是我唯一可以看到的选项。
我发现在iOS 6上有时会caching请求,即使请求有NSURLRequestReloadIgnoringCacheData
。 添加一个返回nil
的caching响应块可以防止请求被caching。
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];
不幸的是这些方法都不适合我。 我设法禁用caching的唯一方法就是这样:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
这是原来的答案
NSURLRequest *request = [NSURLRequest requestWithURL:URL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
这可能取决于您的服务器实现,但是向您的传出请求添加Cache-Control:no-store
头应导致包含相同头的响应,从而命令NSURLCache
不caching响应到磁盘。
恕我直言,这是比完全禁用磁盘caching更好的方法,特别是如果您正在编写其他应用程序可能要使用NSURLCache
SDK代码。