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