HanekeSwift не может выделить память

Я извлекаю около 136 изображений, каждое размером около 500 КБ, чтобы они кэшировались на диске.

После загрузки изображения № 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()
}

Но даже если я это назвал (и, возможно, он должен очистить кэш памяти), я все равно получаю сообщение об ошибке, поэтому я не знаю, что не так.

Есть идеи?

1 ответ

У меня была та же проблема, и я сделал, как и вы, сделал Cache.onMemoryWarning() публичным, а затем вызвал Shared.imageCache.onMemoryWarning() в методе didRecieveMemoryWarning ().

И это сработало!

Для меня предыдущие ответы улучшились, но не полностью решили мои проблемы с нехваткой памяти. Я мог бы даже заставить приложение аварийно завершить работу, не успев напечатать предупреждение о памяти на консоли.

В моем приложении было два кеша Haneke. Кеш UIImage и кеш данных. Когда они оба одновременно получали значительные объемы данных, они, похоже, не могли контролировать память.

Я удалил свой кеш UIImage и использовал только свой общий кеш данных. Везде, где выборка имела дело с URL-адресами изображения и хотела UIImage, я принудил данные к UIImagelet image = UIImage(data: data)! а остальная часть моего кода работала как раньше.

Пока мне кажется, что это намного более стабильно при одновременной загрузке сотен изображений и видеофайлов.

Для причудливых встроенных помощников изображений требуется кеш UIImage. Вы можете вернуться к тому же старому поведению, расширив UIImage самостоятельно, скопировав код для помощников из Haneke, подключившись к вашему кешу данных и выполнив необходимое принуждение.

Другие вопросы по тегам