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