问题标签 [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.
ios6 - AFURLConnectionOperation + NSURLConnection 在 iOS5.1 & iOS6.0 下表现不同?
我看到 iOS6、AFNetworking 和 NSURLConnection 的问题没有任何意义。
重现问题
- 提出请求,任何请求,并确保其成功
- 关闭互联网连接
- 再次启动应用程序并再次发出相同的请求
iOS5.1
数据被拾取[从我假设的 NSURLCache],并被connectionDidFinishLoading
调用。
iOS6.0
数据未被拾取[我验证了 NSURLCache 的 Cache.db 确实在 sqlite db 中有该图像作为 blob],并被connection:didFailWithError:
调用。
我在 API 差异中没有发现任何表明NSURLConnection、NSURLRequest 或 NSURLCache有任何相关变化的东西。
结果是,当应用程序在 5.1 上离线运行时调用成功块,而在 iOS6.0 上调用失败块
更新
编写了一个测试来确认 NSURLConnection、NSURLRequest 或 NSURLCache 的行为没有不同。
nsurlconnection - NSURLRequestReturnCacheDataElseLoad 在第一次请求时没有从缓存中加载?
我正在创建一个需要从远程 API 获取大量信息的 iOS 应用程序。有很多 http 请求可以完美缓存,但似乎NSURLConnection
缓存不够积极:每次我杀死应用程序并重新启动它时,所有请求都会再次发出,而不是来自缓存(iOS 5应该使用磁盘缓存)。如果我第二次(在应用程序生命周期内)发出相同的请求,它确实来自缓存。
我正在使用该NSURLRequestReturnCacheDataElseLoad
策略,并且设置了 http 服务器上的缓存控制标头,因此可以缓存所有内容。
所以问题是每次应用程序启动时都会再次发出所有请求。为什么这不是来自磁盘?
编辑:似乎这个问题只存在于 url 中有查询时。例如,当我请求http://www.apple.com/时,一切都很好,在新的应用程序启动时,实际上没有发出任何请求。当我更改为http://www.apple.com/?test时,总是会发出第一个请求。
编辑2:看起来像TTURLRequest
(three20的一部分)并且SDURLCache
是解决方案。
ios - 使用 NSURLCache 为 UIWebView 预加载本地资源
我正在开发一个在 UIWebView 中显示本地存储内容(HTML 文件)的 iOS 应用程序。
问题是从 HTML 引用的一些资产(例如字体和图像)在第一次加载时需要很长时间。我认为问题的解决方案是在将这些资产用于 UIWebView 之前以某种方式使用 NSURLCache 缓存这些资产,但这似乎会造成一些麻烦。
到目前为止我已经尝试过:
子类化 NSURLCache 并覆盖
cachedResponseForRequest
,以便它返回一个响应,其中包含预加载在 NSData 对象中的资产。预加载是在init
方法中完成的。被覆盖的cachedResponseForRequest
似乎被调用了,但由于某种原因,UIWebView 仍然从文件系统加载资产。用于在 UIWebView 中使用
storeCachedResponse:forRequest:
之前缓存包含资产的 NSCachedURLResponse 对象。
这些似乎都没有帮助。关于在哪里寻找问题的任何建议?
objective-c - NSURLRequest 显然缓存在 Cache.db 但再次请求
我正在使用此块在 iOS 5 应用程序中同步图像下载。逻辑很简单,如果图像在缓存中使用它,如果不下载它,我想 NSURLRequestReturnCacheDataElseLoad 正是这种行为。
我用三张图片做了一个测试。当我第一次下载它们时,我可以看到消息'downloaded MyimgName1.jpg''downloaded MyimgName2.jpg''downloaded MyimgName3.jpg',通过打开Cache.db,我可以看到我所有的图像都正确存储在其中.
但是,当我尝试再次下载时,只有第一个下载的图像显示消息“MyimgName1.jpg 在缓存中找到”,这意味着对于所有其他 2 和 3 请求,cachedResponse 为 nil:
我在 NSCache 的设置或创建中遗漏了什么吗?
iphone - 扩展 NSURLCache 不能使用参数
我有一个类 URLCache 扩展 NSURLCache
在 URLCache.m
如果 Am 调用 URLCache.m 那么 A 需要将参数 _pageType 发送到 URLCache,我不知道如何发送 _pageType。我试过了
但每次在上午
得到
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSURLCache setPageType:]:无法识别的选择器发送到实例 0xabd1470”
为什么不能将参数发送到 NSURLCache?
如何发送_pageType?
objective-c - 使用来自 NSURLCache 的数据
我已经设置了一个 NSURLCache 并将 sharedcache 设置为初始化的缓存。
当我在 NSURLConnection 委托中记录大小时,我可以看到缓存大小在增长。
由于某种原因,当请求相同的数据时,再次向服务器发出请求,缓存大小的日志显示日志保持相同的大小。
这向我表明缓存工作正常,但由于某种原因,URL 加载器没有从缓存中提取。
我对请求使用默认缓存策略,并仔细检查了响应中的标头。
在这里阅读之后,我看到其他人提到了同样的问题,并将内存容量和磁盘容量设置为相同的值可以解决他们的问题,但这对我不起作用。每次都发出新请求,而不是从缓存中提取。
在发出请求之前检查数据缓存是否明智?我没有看到 NSURLRequest 方法的缓存策略参数的意义。
memory - NSURLCache :说它的缓存,不是,并且内存统计没有变化
我正在尝试通过记录 NSURLCache 周围的内存统计信息来确认 URL 缓存。
我已经扩展了基础 NSURLCache 如下:
我还有执行以下操作的按钮代码:
当我单击视图上的一些测试按钮以触发 URLConnection 事件时,我看到使用正确的 URL 调用这些方法。但是,缓存内存和磁盘使用统计信息永远不会改变。
来自日志的示例
这让我相信:
1 - 我做错了什么,没有正确观察缓存行为
2 - 这个缓存并不是真正的缓存
任何想法将不胜感激。
iphone - 在 iOS 中清除内存警告中的 url 缓存
NSURLCache
收到内存警告时清除共享是一种好习惯吗?像这样的东西:
我是否正确地假设这也会不必要地清除磁盘缓存?
如果是这样,是否可以只清除内存缓存?
ios - 有没有办法查询 HTML5 应用程序缓存?
有没有办法查询 HTML5 应用程序缓存的内容?
我正在编写一个使用大量缓存 Web 内容的 iOS 应用程序。在应用离线时加载给定页面之前,我想检查该页面是否存在于缓存中。如果没有,我会通知用户他们必须在线才能看到该内容;如果是这样,我会继续加载它。
现在,iOS 有自己的 URL 缓存系统,我最初只是假设我可以这样检查缓存的内容:
傻我。似乎 iOS 的缓存和 HTML5 的缓存是不相关的: -cachedResponseForRequest: 对任何请求都返回 nil,即使我可以看到 URL 在 HTML5 应用程序缓存中(使用 Safari Web 调试器)。
那么,有什么方法可以查询 HTML5 应用程序缓存的内容吗?答案是使用 Objective-C 代码还是 Javascript 并不重要,因为我总是可以从 Objective-C 执行相关的 JS。
ios6 - iOS6+ 离线管理就像原生缓存管理一样工作
我正在尝试将离线使用添加到应用程序。我只需要 NSURLRequest / NSURLCache 完成的所有工作,同时能够准确选择磁盘存储位置,因此我可以将它放在永远不会被删除的“/Library/Application Support/whatever”中(不要忘记标记,因此它不会在 iCloud / iTunes 上同步)。
我觉得我必须自己完成所有工作,并且我在第一期中运行。NSURLCache 在内存中保存了一个字典,其中键是 NSURLRequest,值是关联的 NSCachedURLResponse。我也在做同样的事情,但是我不能在磁盘上写这本字典,因为它不是由基本类型组成的。
你知道如何在磁盘上写这样一本字典吗?