问题标签 [nsurlcache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 如何防止浏览器缓存干扰 NSURLCache?
我正在尝试在 iOS 上实现以下目标:
- 始终将本地文件加载到
UIWebView
静态资产(.html、.js 等) - 允许更新协议,以便在一段时间后我们可以为相同的 URL 返回一组不同的静态资产
我有这个工作,但似乎NSURLCache
有时完全错过(可重现),解决这个问题的唯一可靠方法是在正在加载的页面上使用讨厌的缓存破坏技巧。另一个同样令人讨厌的黑客攻击是摧毁UIWebView
并创造另一个。
作为一个例子,我们有三个版本的 webapp(分别为 v1、v2 和 v3 的红色、蓝色和绿色):
每个屏幕由单个 HTML 和 JS 文件组成。
每 2 秒发生以下情况:
- 我们更改
NSURLCache
将返回的文件以使其返回不同的版本(注意我们通过覆盖cachedResponseForRequest:
而不是实现这一点storeCachedResponse:forRequest:
) UIWebView
加载一个虚拟页面“ http://www.cacheddemo.co.uk/index.html ”
逻辑被NSURLCache
简单地实现为旋转NSMutableArray
:
视图控制器逻辑使用 GCDUIWebView
在延迟后重新加载:
我在这里无法理解的部分是添加查询字符串将使页面重新加载完美无缺(加载 R - G - B - R - G - ...) - 这是未注释的行:
一旦我们摆脱了查询字符串,NSURLCache
除了第一个请求之外的停止被击中,所以它只停留在 R 页面上:
查询字符串导致NSURLCache
它按预期行事的事实向我表明,浏览器缓存正在以某种方式进行干扰。在我的脑海中,我认为缓存级别是这样工作的:
- 检查浏览器缓存
- 如果到目前为止没有返回 - 检查
NSURLCache
- 如果到目前为止没有返回 - 检查代理服务器缓存
- 最后尝试加载远程资源
我们如何才能完全禁用浏览器缓存,以便完全控制UIWebView
. 不幸的是,我没有看到设置Cache-Control
标题的选项NSURLCache
- 我已经尝试返回NSHTTPURLResponse
带有标题集的 a ,但这似乎被忽略了。
ios - 移除 UIWebView 的内部缓存
我在 中显示一个网络应用程序UIWebView
,有时页面的内容会改变。内容更改后,应用程序会清除缓存。但是,当我转到我之前访问过的页面时,UIWebView
它不会发送 HTTP GET 请求,而是从缓存加载,即使我已经禁用了缓存,如下所示:
最初我正在使用 cachePolicy 加载请求cachePolicy:NSURLRequestReturnCacheDataElseLoad
。
UIWebView
有某种内部缓存。已经访问过的页面将从这个内部缓存加载而不是通过NSURLCache
,并且也没有发送请求。
有什么办法可以清除内部缓存UIWebView
吗?我什至在重新创建,UIWebView
但缓存仍然存在。
ios - How to clear cached response and ETag info when using NSURLCache?
I'm using RestKit in my iOS app to get my data and map them to objects in Core Data. The call returns an ETag so whenever the data is the same I'm getting a 304 from the server and no data is transfered.
This works perfectly fine and I'm happy with it.
BUT when I log out of my app, I need to clear those objects from core data. That works as well.
Then I want to clear the cached response so that the next time I log in RestKit does NOT send an ETag and that I can get the data again. So I'm doing this:
but it doesn't work, I'm still getting a 304 and no data.
How should I delete the ETag info??
ios - 使用 diskPath 位置预加载 NSURLCache 以缓存文件
寻找一些关于这是否可能的见解。我正在尝试使用 Cache.DB 预加载我的 NSURLCache,该 Cache.DB 已经填充了来自 uiwebview 的缓存。我不明白为什么这是不可能的,因为Apple文档指出diskPath:
“在 iOS 中,路径是应用程序默认缓存目录的子目录的名称,用于存储磁盘缓存(如果子目录不存在,则会创建该子目录)。”
所以我所做的是将整个 Cache 文件夹作为引用文件夹复制到我的应用程序包中,并使用下面代码中的路径。但是,我无法提取缓存。当我打印出来时,缓存文件的路径位置是正确的。知道吗?
另外请不要提及我已经研究过的EVURLCache 。
ios - 试图理解 NSURLCache 以及为什么我一直在消耗内存
我的应用程序在很长一段时间内循环发出大量 URL 请求(调用 Web 服务)。当我在分配工具中查看应用程序时,我发现在该循环运行期间内存消耗不断增加。出于测试目的,我将循环简化为以下内容,它表现出相同的行为:
当我第一次发现问题时,我认为这是因为我的 URL 请求/响应被缓存了。那是我添加[[NSURLCache sharedURLCache] removeAllCachedResponses]
. 我期望在每次调用 Web 服务后清除缓存并释放用于 URL 缓存目的的任何内存。没运气。
我一定是做错了什么,但我找不到。我认为这是 URL 缓存,是不是在叫错树?还能是什么?
ios - Wrong image being cached with AFNetworking
I'm using UIImageView+AFNetworking
to load images from a remote server on a table view. However, in some situations, the wrong images are cached (on NSURLCache
, not only AFImageCache
), i.e. the cache from a URL returns a response from another one (both used on the app).
My tableView:cellForRowAtIndexPath:
is pretty normal:
}
Also, my category on NSMutableURLRequest
that is used to create the request:
I know that dict
is the current object and that the URLs are fine too. I also trust that the server (Amazon S3) is sending the correct image.
The problem often occurs on the first install of the app (probably because the images are cached after).
Any thoughts?
ios - NSURLCache 不在 iOS 7 中存储缓存数据
下面给出的代码适用于 iOS 6,但不适用于 iOS 7。
在 iOS 6 中,我正在获取缓存的响应数据,但在 iOS 7 中,它返回 null。我使用以下方法在 App 委托中设置了 NSURLCache 对象:
缓存在 iOS 7 中不起作用的原因是什么?
ios - 无法使用超过 2GB 的 discCapacity 配置 NSURLCache
我正在尝试使用可能的最大磁盘容量来配置 NSURLCache。我在 iOS 7 上。
根据文档,NSURLCache 的 discCapacity 属性是一个 NSUInteger,也就是 unsigned int,它应该接受最大值 4,294,967,295 (0xFFFFFFFF)。但是,使用任何高于 0x7FFFFFFF (2147483647) 的值都会导致该值实际报告为 0,并且磁盘缓存根本不工作。
此外,使用 0x7FFFFFFF (2GB) 实际上会在磁盘缓存填满接近 2GB 的任何地方时导致 malloc 错误。
我发现这个工作的唯一方法是最大值为 1GB (1073741824)。使用此值时,一切都按预期工作。
我想为我的应用程序使用尽可能多的磁盘容量的 NSURLCache。我如何使用 8 甚至 16GB?
更新[按照评论中的要求添加代码示例]:
或者你也可以这样做:
ios - iOS REST 调用和缓存策略
过去,在浏览基于 REST 的 iOS 应用程序的各种屏幕时,我使用了几种不同的策略来提供最佳用户体验:
- 利用 NSURLCache:虽然这适用于某些用例,但我对这样的方法更感兴趣:“在调用 API 时立即显示缓存,然后在必要时使用更新的数据更新屏幕”。NSURLCache 似乎只为我提供了诸如读取表单缓存或根据各种策略从远程读取之类的选项,但不从缓存读取然后从远程读取。
- 利用核心数据:通过 Restkit、AFIncrementalStore 或自定义框架,这里的想法是在调用时从核心数据中获取数据。一旦调用返回,核心数据将更新为最新数据并刷新界面。它可以很好地工作,但需要大量的配置和维护,增加了高度的复杂性。当需要离线模式时这是一个不错的选择,但如果只需要缓存,这看起来有点过头了。-
有没有人对此有不同的方法,或者有一个轻量级的库可以推荐,它提供高级缓存功能,而不需要核心数据?
ios - NSURLRequestReturnCacheDataElseLoad 不工作?
我使用了 NSURLRequestReturnCacheDataElseLoad 但它不起作用,即它总是从服务器加载数据,因为每次我收到的数据都不同。
我想知道:
即使使用 NSURLRequestReturnCacheDataElseLoad 策略,它也遵守服务器响应中的缓存控制标头,而不管文档是否说忽略过期日期?
存储策略是
[NSURLCache sharedURLCache]
什么?如果它只在内存中,那么下次我启动应用程序时它不会在磁盘上缓存?我发现这很有趣:
NSURLRequestReturnCacheDataElseLoad 在第一次请求时没有从缓存中加载?
它说
似乎只有在 url 中有查询时才存在此问题。
这是确认的问题吗?
谢谢