iOS - сохраняет ли Collection View каждую ячейку памяти - PullRequest
0 голосов
/ 06 февраля 2019

У меня вертикальное представление коллекции с 6 различными типами ячеек ... Я заметил, что при прокрутке и получении новых сообщений с сервера (я использую механизм подкачки (я выбираю 20на 20)) приложение вылетает с журналом Message from debugger: Terminated due to memory issue

Я также заметил, что это происходит, когда выделяется более 1 ГБ ОЗУ, что безумие, поскольку в каждый момент времени представлено около трех сообщений... Это происходит, когда выбирается более 400 сообщений!

Я полагаю, что в тот момент, когда ячейка не видна, представление коллекции освобождает ее.Это правильно?Поэтому, если в ячейке есть изображение, которое я загружаю / кеширую, когда оно собирается быть представленным, а затем эта ячейка больше не видна из-за прокрутки, тогда изображение не должно быть в памяти.Правильно?

Редактировать 1:

То, что я делаю в коде, это проверка на willDisplay cell, является ли ячейка, которая должна отображаться, последнейодин.Если это так, то я делаю запрос на сервер, чтобы принести мне следующие 20 сообщений, если таковые имеются.Когда это произойдет, я добавляю новые сообщения в массив сообщений.После этого я просто перезагружаю представление коллекции.

Edit 2:

Я использую PFImageView из Parse SDK в качестве механизма кэширования

1 Ответ

0 голосов
/ 06 февраля 2019

Нет, они используются повторно.

Изображения могут находиться в кеше, и это, вероятно, является причиной вашего огромного использования памяти.При необходимости они должны быть удалены из памяти. Если вы хотите реализовать это с нуля, вы можете выполнить поиск по NSCache.

Я бы предложил использовать SDWebImage или Kingfisher для эффективной загрузки и кэширования изображений.

В представлениях коллекций используется программа повторного использования представлений дляповысить эффективность.Когда представления перемещаются за пределы экрана, они удаляются из представления и помещаются в очередь повторного использования вместо удаления.Когда новый контент прокручивается на экране, представления удаляются из очереди и перепрофилируются с новым контентом.

Документы: https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/CollectionViewPGforIOS/CollectionViewBasics/CollectionViewBasics.html

...