我的学习iOS网络篇

iOS - 关于NSURLCache

2015-10-27  本文已影响4735人  Mitchell

一、简介

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 
diskCapacity:20 * 1024 * 1024
 diskPath:nil];
 [NSURLCache setSharedURLCache:URLCache];}

缓存策略由请求(客户端)和回应(服务端)分别指定。理解这些策略以及它们如何相互影响,是为您的应用程序找到最佳行为的关键。

二、NSURLRequestCachePolicy

注意

NSURLRequestReloadIgnoringLocalAndRemoteCacheData
和NSURLRequestReloadRevalidatingCacheData
根本没有实现Link to Radar)更加加深了混乱程度!

常量 -------------------------------意义
UseProtocolCachePolicy------------- --默认行为
ReloadIgnoringLocalCacheData---------不使用缓存
ReturnCacheDataElseLoad-------------使用缓存(不管它是否过期),如果缓存中没有,那从网络加载吧
ReturnCacheDataDontLoad------------离线模式:使用缓存(不管它是否过期),但是从网络加载
NSURLRequestReloadIgnoringLocalAndRemoteCacheData,NSURLRequestReloadRevalidatingCacheData根本没有实现


三、HTTP 缓存语义

 - (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
{ NSMutableDictionary *mutableUserInfo = [[cachedResponse userInfo] mutableCopy]; 
NSMutableData *mutableData = [[cachedResponse data] mutableCopy];
 NSURLCacheStoragePolicy storagePolicy = NSURLCacheStorageAllowedInMemoryOnly; 
// ...
 return [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response] 
data:mutableData 
userInfo:mutableUserInfo
 storagePolicy:storagePolicy];
}

如果 -connection:willCacheResponse: 返回 nil,回应将不会缓存。

 - (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
 return nil;
}

如果不实现此方法,NSURLConnection 就简单地使用本来要传入 -connection:willCacheResponse:的那个缓存对象,所以除非你需要改变一些值或者阻止缓存,否则这个代理方法不必实现。

文章参考自这里

上一篇 下一篇

猜你喜欢

热点阅读