问题标签 [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.

0 投票
1 回答
2436 浏览

nsurlconnection - 如何知道 NSURLResponse 是否来自缓存?

我在特定文件夹上设置了 NSURLCache(../../Application Support/Offline 所以它不会被操作系统随机删除),然后我发送一个带有 NSURLRequestReturnCacheDataElseLoad 策略的 NSURLRequest。

如何判断由符合 NSURLConnectionDelegate 的类处理的响应来自缓存还是来自网络?

0 投票
2 回答
2663 浏览

ios - NSURLCache 在 iOS 6.1 下崩溃

使用 iOS 6.1,我的应用程序在尝试发出多个 HTTP 请求时会在启动后直接崩溃,但它在任何小于 6.1 的操作系统上都可以正常工作。

我 在从 Queue 调用EXC_BAD_ACCESS的函数中遇到崩溃:每次启动我的应用程序时,除了第一次。strlencom.apple.CFURLCACHE_work_queue

NSURLCache 崩溃

我可以通过在应用程序启动后直接清除 NSURLCache 来解决问题:

还有其他人经历过这些崩溃吗?导致这些崩溃的应用程序代码中是否存在某些问题?或者这应该是提交给苹果的错误吗?

0 投票
1 回答
911 浏览

ios - 更快地从 Web 服务加载多个图像

我想从 JSON 网络服务加载多个图像到我的应用程序。这些图像用作我的应用程序中“商店”的缩略图。因此,当用户单击按钮转到“商店”时,正在发出请求。每次用户单击按钮时都会重复此请求。

现在这里没有问题,但是当JSON中的数据成倍增加时,问题就出现了。之前,我们只加载 5 张图像。现在,我们正在加载至少 18 张图像。当图像乘以 100 或更多时,这些可能会造成真正的问题。

我正在考虑使用NSURLCache缓存图像,但我怎么知道图像是否有更新?假设添加了新图像,或者不再使用当前图像?谁能给我任何关于解决此问题的最佳方法的想法?

0 投票
1 回答
4275 浏览

ios - NSCachedURLResponse 返回对象,但 UIWebView 不解释内容

我正在向 UIWebView 发送请求。加载的网页上有 AJAX 调用。我需要分析 AJAX 流量以确定用户是否登录。为此,我在 AppDelegate 中安装了 NSURLCache:

此 MYURLCache 类正确接收通过 webview 运行的流量。我只能终止 AJAX 调用。然后我产生一个自己的 AJAX 调用请求。这个返回来自网络服务器的完美响应。所以现在要做的最后一步是构造 NSCachedURLResponse 返回对象。我也管理了这个,但是 webview 在返回对象时根本不做任何事情。如果我只返回 nil,WebView 加载一切正常(nil 是 NSURLCache 的消息,没有缓存,所以 webview 应该开始自己加载它)。

0 投票
1 回答
4646 浏览

ios - 防止 UIWebView 无限期地分配内存(NSURLCache 显然不起作用)

我一直试图了解 UIWebView 缓存是如何工作的。因为我的目标是能够管理 UIWebView 分配的内存(至少,尽可能多),以避免内存无限增加和应用程序因此而被杀死。

阅读了 其他 stackoverflow 问题搜索 网络之后,我决定尝试NSURLCache sharedURLCache,但我无法弄清楚它是如何工作的。

我的测试场景是这样的:

我已经为iOS 5实现了一个测试应用程序,其中我有一个带有 UIWebView 的单一视图。这个 UiWebview 将加载一个本地index.html文件,如下所示:

在这个index.html文件中,我有一个 JS 脚本,它从 Flickr 下载 JSON,并将最后一张图片上传到他们的公共提要。每个图像都附加到一个列表中。整个过程每秒重复一次,直到我们从提要中下载 1000 张图像。见代码:

最后,在我的AppDelegate 中,我按照本文所述设置了 sharedURLCache :

但是,不管它应该发生什么,当我打开仪器并运行应用程序检查分配时,内存在我们下载图像(高达 20MB)时不断增长,而不是像我所期望的那样扁平化 4-6MB 如果 UIWebView将使用此 sharedURLCache 来缓存下载的图像。

达到 1000 张图像后的仪器演变

有人知道我在做什么错吗?我误解了什么吗?我加载页面错误吗?UIWebView 是否对 JS 中加载的图像使用另一个缓存?

请让我知道你的想法。我真的需要了解这个 sharedURLCache 是如何工作的,以及 UIWebView 如何使用它来缓存 URLRequest、图像……以防万一它被使用。我不想有一个使用 UIWebView 的应用程序,它可以不受控制地分配内存。

0 投票
1 回答
497 浏览

ios - IOS拦截webview加载并将网页资源保存到磁盘

我已经读到您可以跟踪正在下载的单个资源以用于加载 web 视图,请参见此处。我想要做的是拦截每个资源并将其保存到文件中。然后,如果用户想保存网页,我会将保存的资源和 html 保存在永久位置。但我是新手,不知道如何设置。有人可以帮忙吗?

0 投票
0 回答
891 浏览

ios - iOS NSURLCache / NSURLConnection 304 + max-age

Just out of curiosity does NSURLCache just completely ignore the max-age cache control header on 304 responses? I have a system setup using etags and max-age, that in theory should only send a request to the web service every 10 seconds based on the max-age setting in the header. Now this works when iOS gets the 200 response on initial load, but not when it receives the 304 response, it just continues to make the request to the server despite the max-age value. Based on what I've read in the past, what I'm trying to do is COMPLETELY valid http to ease server resources.

Sometimes I dislike the magic in the background.

0 投票
1 回答
541 浏览

ios - NSURLResponse 返回 Content-Range,忽略我要求的范围

下载文件时,我希望能够恢复下载。例如:

这将产生一个带有如下标头的 get 请求:

范围:字节=1000-

我希望第一个 206 响应给我一个我要求它开始的块,有一个像这样的标题和值(从 转储allHeaderFields):

“内容范围”=“字节 1000-340197/340198”;

但有时它会跳到前面并返回如下内容:

“内容范围”=“字节 32000-340197/340198”;

这真的很糟糕,因为我需要从 1000 到 32000 的那些字节,但它并没有给我。

我知道没有服务器错误,因为当我卷曲到服务器时,它会返回我要求的部分。另外,当我使用wireshark 时,我看不到任何数据包进入服务器。所以这是 iOS 端的问题,可能与NSURLCache

0 投票
2 回答
5793 浏览

ios - 离线时如何使用 NSURLCache 返回缓存的 API 响应(iOS 应用)

我希望有人可以对我一直在研究但没有取得太大进展的一些事情有所了解。

我想利用 NSURLCache 为我在 iOS 应用程序中进行的 API 调用返回缓存的响应。当设备在线时,如果它足够新,我想返回缓存的响应,否则从远程获取。当设备离线时,我想立即返回缓存的响应(如果有的话),不管它的年龄。

我正在使用AFNetworking. 我正在进行的 API 调用是针对我控制的服务器的。协议是 HTTPS。响应标Cache-Control头当前为"max-age=0, public". 我目前没有设置与缓存相关的请求标头(应该吗?)。我将请求的缓存策略设置为NSURLRequestReturnCacheDataDontLoad离线时,在线时使用默认值NSURLRequestUseProtocolCachePolicyCache.db我可以在磁盘上的默认值中看到请求及其响应。但是,当我离线时,所有请求都失败(没有缓存的响应(尽管似乎已被缓存)正在使用/返回。

根据http://nshipster.com/nsurlcache/我初始化一个sharedURLCacheindidFinishLaunchingWithOptions并将 AFNetworkingsetCacheResponse块设置为如下所示:

我已经阅读了有关该主题的这些和其他帖子:

http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/ http://blackpixel.com/blog/2012/05/caching-and-nsurlconnection.html

我想知道是否有人在使用标准之前成功实现了此功能NSURLCache(也对成功案例感兴趣,SDURLCache但 Peter S. 说从 iOS5 开始支持磁盘缓存,因此SDURLCache不再需要,即我想使用默认内置缓存)。

提前致谢!

0 投票
1 回答
868 浏览

ios - 如果 NSURLCache 满了怎么办?

我正在使用默认的 NSURLCache 在我的 iPhone 应用程序中缓存图像。如果缓存已满,我会尝试缓存另一个图像,会发生什么?

它不会缓存图像吗?或者它将被缓存的最旧图像替换?

非常感谢