Вопрос проверяет умение предотвращать race condition при асинхронной загрузке изображений.
Результат загрузки можно связать с моделью через идентификатор или ссылку на модель. Часто используется проверка URL, id модели или токен запроса. Перед установкой изображения сравнивают текущую модель ячейки с той, для которой запускалась загрузка. Если данные не совпадают, результат игнорируется. Это гарантирует, что изображение применяется только к актуальной ячейке.
Связывание результата загрузки с моделью — основной способ борьбы с подменой изображений.
Самый распространенный вариант — хранить идентификатор текущей модели.
cell.modelID = model.id
loadImage(for: model.id) { image, id in
if cell.modelID == id {
cell.imageView.image = image
}
}
Таким образом, изображение устанавливается только если модель совпадает.
Иногда достаточно сравнить URL.
В ячейке хранится текущий URL
В completion приходит URL запроса
При несовпадении результат игнорируется
Если модель — ссылочный тип, можно сравнивать сам объект.
Работает при корректной архитектуре
Требует аккуратного управления памятью
Любой асинхронный результат должен быть валидирован перед обновлением UI. Связь с моделью — самый надежный способ избежать подмены изображений.