hpi*_*que 3 iphone didreceivememorywarning nsurlcache ios
NSURLCache收到内存警告时清除共享是一个好习惯吗?像这样的东西:
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
[[NSURLCache sharedURLCache] removeAllCachedResponses];
}
Run Code Online (Sandbox Code Playgroud)
我是否正确地假设这也会不必要地清除磁盘缓存?
如果是这样,是否可以只清除内存缓存?
当出现内存警告时,您只需要清除内存缓存而不是磁盘缓存。问题removeAllCachedResponses在于它将清除两者。从我的测试来看,这似乎只清除了内存缓存。
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
NSURLCache * const urlCache = [NSURLCache sharedURLCache];
const NSUInteger memoryCapacity = urlCache.memoryCapacity;
urlCache.memoryCapacity = 0;
urlCache.memoryCapacity = memoryCapacity;
}
Run Code Online (Sandbox Code Playgroud)
我唯一关心的是线程问题。有一个在底部的脚注此文章。
StackOverflow 上有很多关于通过重新创建 NSURLCache 来清除它的建议,但是,我们已经看到这会导致在重新创建缓存时在另一个线程上发生请求时偶尔崩溃。因此,我们的建议是在应用程序启动时创建一次缓存,并在适当的时候清除它。
上述解决方案不会重新创建缓存,但它可能仍会遇到相同的问题,我还没有对此进行广泛测试。
| 归档时间: |
|
| 查看次数: |
1937 次 |
| 最近记录: |