我提取了大约136张图片,每张图片大约 500 KB ,以便将它们缓存在磁盘上。
下载图像#98后,我开始对剩下的图像收到以下错误(这让我觉得它们没有被缓存)。
2015-07-29 09:52:44.471 MyProject[299:3418965] [HANEKE][ERROR] Failed to get data for key https://s3.amazonaws.com/my_bucket/my_image_n_99.jpg
Jul 29 09:52:45 my.host.net MyProject[299] <Error>: CGBitmapContextInfoCreate: unable to allocate 31492608 bytes for bitmap data
MyProject(299,0xb039f000) malloc: *** mach_vm_map(size=31494144) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
我的第一个猜测是内存缓存已满,所以我打电话给 HanekeSwift Cache.onMemoryWarning()
(必须让它public
),因为它有以下内容实现:
for (_, (_, memoryCache, _)) in self.formats {
memoryCache.removeAllObjects()
}
但即使我打电话给它(据说它应该清除内存缓存),我仍然会收到错误,所以我不知道错误。
有什么想法吗?
答案 0 :(得分:0)
我遇到了同样的问题,我按照你的方式做了,将 Cache.onMemoryWarning()公开,然后在方法中调用 Shared.imageCache.onMemoryWarning()的 didRecieveMemoryWarning()强>
它有效!
答案 1 :(得分:0)
对我来说,以前的答案确实有所改善,但不能完全解决我的记忆不足问题。我什至没有时间就可以将应用程序崩溃,而没有时间在控制台上打印内存警告通知。
我的应用中只有两个Haneke缓存。 UIImage缓存和数据缓存。当他们两个同时获取大量数据时,它们似乎无法控制内存。
我删除了UIImage缓存,仅使用了通用数据缓存。提取操作在处理图像URL并希望使用UIImage的任何地方,我都将数据强制转换为UIImage let image = UIImage(data: data)!
,其余代码也像以前一样工作。
到目前为止,当我同时处理数百个图像和视频文件时,这似乎更加稳定。
精美的内置图像助手需要UIImage缓存。您可以通过自己扩展UIImage,从Haneke复制帮助程序的代码,连接到数据缓存中并进行必要的强制操作来获得相同的旧行为。