Табличное представление работает немного иначе, чем вы могли бы ожидать вначале.По сути, только ячейки, которые вы видите, загружаются в память.Если подумать, это имеет смысл - если у вас в таблице 10 000 элементов, все загружены в память, ваше приложение исчерпает память и довольно быстро падает.
Когда вы прокручиваете, ваши ячейкисоздано в реальном времени.Запутанная часть: ваши ячейки не создаются с нуля, вместо этого iOS просто берет ячейку, которая только что покинула экран, и снова отправляет ее через
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
.Таким образом, подпредставление, которое вы добавили в верхнюю ячейку, не будет удалено, когда эта ячейка будет повторно использована дальше при прокрутке.Краткий ответ: убедитесь, что вы удалили / сбросили подпредставление в функции выше, таким образом вы «сбросите» все использованные ячейки, которые используются далее в представлении таблицы.
Почему iOS делает это таким образом?Эффективность - в принципе, создать ячейку таблицы очень дорого.Поиск ширины, цвета, рисование фигуры ... + много чего еще занимает много сил процессора и времени.Гораздо эффективнее повторно использовать ячейки каждый раз, а не начинать с нуля.
Поэтому сбросьте только необходимые поля ячейки в функции создания ячейки.Таким образом, у вас будет плавная и быстрая прокрутка, но представления / свойства вашей ячейки будут сброшены до повторного использования ячейки.
Сначала сбиваетесь с толку?Ага.Но определенно лучший способ сделать это.