我可以指定在AFNetworking中缓存响应的时间吗?

时间:2014-06-08 01:10:47

标签: objective-c caching afnetworking asihttprequest afnetworking-2

我是ASIHTTPRequestAFNetworking的延迟转换。到目前为止,AFN要优越得多,但我从ASI中遗漏的一个功能是能够使用ASICacheStoragePolicy枚举来指定特定项目应缓存多长时间。它允许您指定仅为此会话缓存项目,永久或根本不缓存。

AFNetworking是否存在类似情况?

3 个答案:

答案 0 :(得分:1)

最新版本的AFNetworking依赖于两种缓存机制:

  • NSCache for images
  • NSURLCache NSURLConnection的默认缓存类

配置最后一个我确信你可以达到你想要的效果 这是关于这两种机制的amazing blog article

答案 1 :(得分:1)

所以,从ASICacheDelegate.h开始,我们可以读到:

// Cache storage policies control whether cached data persists between application launches (ASICachePermanentlyCacheStoragePolicy) or not (ASICacheForSessionDurationCacheStoragePolicy)
// Calling [ASIHTTPRequest clearSession] will remove any data stored using ASICacheForSessionDurationCacheStoragePolicy
typedef enum _ASICacheStoragePolicy {
    ASICacheForSessionDurationCacheStoragePolicy = 0,
    ASICachePermanentlyCacheStoragePolicy = 1
} ASICacheStoragePolicy;

来自articleOriginate解释了AFNetworking依赖于NSURLCache

所以当你说你想要

  

指定在AFNetworking

中缓存响应的时间

关于ASI的作用,我们讨论的是应用程序启动而不是秒(或任何时间单位)。

并且因为NSURLCache可以用作内存缓存(默认情况下,它在每个应用程序启动之间重置)或者作为磁盘持久缓存,您应该能够尝试所需的行为。

简而言之,对NSURLCache采取任何措施都不会为您提供ASICacheForSessionDurationCacheStoragePolicy的行为。

以下代码段将为您提供ASICachePermanentlyCacheStoragePolicy的行为:

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:2 * 1024 * 1024
                                                        diskCapacity:100 * 1024 * 1024
                                                            diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];

最后,如果您希望使用[ASIHTTPRequest clearSession]或者想要使用时间单位来管理缓存,the same article会有一个标题为" Subclass NSURLCache for Ultimate的部分控制"

AFAIK,使用AFNetworking的API并不是一件简单的事情,但这应该是一个为开源项目做贡献的好机会:)

答案 2 :(得分:0)

也许你正在寻找这个:

AFHTTPRequestOperationManager *operation= [AFHTTPRequestOperationManager manager] ;
operation.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;

和枚举是:

enum
{
    NSURLRequestUseProtocolCachePolicy = 0,
    NSURLRequestReloadIgnoringLocalCacheData = 1,
    NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
    NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,

    NSURLRequestReturnCacheDataElseLoad = 2,
    NSURLRequestReturnCacheDataDontLoad = 3,

    NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
};
typedef NSUInteger NSURLRequestCachePolicy;