我是ASIHTTPRequest
到AFNetworking
的延迟转换。到目前为止,AFN要优越得多,但我从ASI中遗漏的一个功能是能够使用ASICacheStoragePolicy
枚举来指定特定项目应缓存多长时间。它允许您指定仅为此会话缓存项目,永久或根本不缓存。
AFNetworking
是否存在类似情况?
答案 0 :(得分:1)
最新版本的AFNetworking依赖于两种缓存机制:
配置最后一个我确信你可以达到你想要的效果 这是关于这两种机制的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;
来自article的Originate解释了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;