Выбор ответа Middle UIKit спрашивают часто обновлено

Неверная картинка в переиспользуемой ячейке

Вопрос

При быстром скролле в ячейках мелькают чужие аватары. Какая причина самая вероятная?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Загрузка завершается, когда ячейка уже переиспользована для другой строки. Ячейки переиспользуются: та же ячейка через секунду показывает другую строку.

Варианты ответа

  1. UITableView кеширует картинки между ячейками и подставляет их из кеша
  2. Загрузка завершается, когда ячейка уже переиспользована для другой строкиправильный ответ
  3. Ячейки создаются заново на каждую строку, и картинки путаются
  4. Аватары грузятся на главном потоке и не успевают к показу своей строки

Разбор

Ячейки переиспользуются: та же ячейка через секунду показывает другую строку. Если загрузка запущена для строки 3, а закончилась, когда ячейка уже отображает строку 20, картинка окажется не там. Решение: в prepareForReuse сбрасывать картинку и отменять загрузку, а перед присваиванием проверять, что ячейка всё ещё ждёт тот же URL. Таблица картинки не кеширует, ячейки как раз не создаются заново. Загрузка на главном потоке дала бы подтормаживания, а не чужие картинки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.