Когда яблоко разработало UITableView
для первого iPhone, у них возникла проблема с производительностью при прокрутке. Тогда один умный инженер обнаружил, что причиной этого было то, что распределение предметов идет с ценой, поэтому он придумал способ повторного использования ячеек.UITableView dequeueReusableCellWithIdentifier Theory
«Распределение объектов имеет снижение производительности, особенно если распределение должно происходить несколько раз в течение короткого периода, скажем, при прокручивании пользователей представления таблицы. Если вы повторно использовать клетки вместо выделения новых, вам значительно повышают производительность настольного просмотра ».
Источник: IOS справочная библиотека
Для повторного использования ячейки вы используете:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
Теперь, что я интересно, что на самом деле здесь происходит? Он выглядит в TableView, если есть ячейка с этим идентификатором и просто возвращает ее? Хорошо, да, но если он отправляет ссылку вместо выделения, и у меня есть табличный вид, скажем, 4 ячейки с одинаковым идентификатором, все видимые. Как он может умножаться на четыре экземпляра без выделения?
Я хочу знать это, потому что я создаю компонент типа календаря, и все ячейки имеют одну и ту же структуру только текст внутри изменений. Поэтому, если бы я мог как-то повторно использовать свои ячейки вместо выделения, я думаю, что я могу получить лучшую производительность.
Моя собственная теория состоит в том, что она выделяет четыре ячейки (просто потому, что она тоже). Когда ячейка исчезает с экрана, она будет помещена в очередь повторного использования TableView. Когда нужна новая ячейка, она смотрит в очередь, если ячейка с тем же идентификатором доступна, она вызывает метод prepareForReuse
в этой ячейке и удаляет себя из очереди.
Короткий ответ: Да. У него есть отдельная очередь/набор повторного использования, которая не совпадает с вещами, уже встречающимися в таблице. –