2

我正在获取大约 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

我的第一个猜测是内存缓存被填满了,所以我调用了HanekeSwiftCache.onMemoryWarning()(必须成功public),因为它具有以下实现:

for (_, (_, memoryCache, _)) in self.formats {
    memoryCache.removeAllObjects()
}

但即使我调用了它(据说它应该清除内存缓存),我仍然得到错误,所以我不知道出了什么问题。

有任何想法吗?

4

2 回答 2

0

我遇到了同样的问题,我和你一样做了,将Cache.onMemoryWarning() 公开,然后在方法 didRecieveMemoryWarning() 中调用Shared.imageCache.onMemoryWarning ()

它奏效了!

于 2016-02-01T12:04:01.440 回答
0

对我来说,以前的答案确实有所改善,但并没有完全解决我的内存不足问题。我什至可以让应用程序在没有时间向控制台打印内存警告通知的情况下崩溃。

我的应用程序中有两个 Haneke 缓存。UIImage 缓存和数据缓存。当他们俩同时获取大量数据时,他们似乎无法控制内存。

我删除了我的 UIImage 缓存,只使用了我的通用数据缓存。提取处理图像网址并需要 UIImagelet image = UIImage(data: data)!的任何地方,我将数据强制转换为 UIImage,其余代码像以前一样工作。

到目前为止,在同时加载数百个图像和视频文件时,这对我来说似乎要稳定得多。

花哨的内置图像助手需要 UIImage 缓存。您可以通过自己扩展 UIImage 来获得相同的旧行为,从 Haneke 复制帮助程序的代码,挂钩到您的数据缓存并执行需要的强制。

于 2019-10-25T13:30:14.630 回答