Я использую «знаменитый» шаблонный код, который почти каждый использует для обработки cellForRowAtIndexPath:является dequeueReusableCellWithIdentifier обязательным для предотвращения утечек памяти?
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"someCustomCellID"];
if (cell == nil) // nothing to recycle from the queue: create a new cell
, но это даст мне много причин проблем»мои клетки содержат изображения, которые я загружаю асинхронный и две функциональные (освобождение пакета из очереди и асинхра load) часто конфликтуют. Поэтому я стараюсь создавать каждый раз новую ячейку, и она работает очень хорошо и быстро. Но у меня есть сомнения: должен ли я по-прежнему вызывать dequeueReusableCellWithIdentifier для освобождения памяти, даже если я игнорирую возвращаемое значение и каждый раз создаю ячейки? Я предполагаю, что клетки больше не используются автоматически освобождаться (как должно быть), но мне интересно, если очередь кэширования может потребовать явную «бесплатно» с вызовом DEQUEUE ...
Фактически не повторное использование ячеек является более плавным! Я стараюсь с 1K ячейками. Проблема с асинхронной загрузкой заключается в том, что вы можете закончить загрузку изображения в неправильную ячейку, потому что она повторно используется до того, как фоновый процесс завершит обработку изображения. Чтобы прояснить мой комментарий: я не говорю, что dequeueing является неправильным (конечно, нет), просто это не соответствует моему конкретному делу. –
Как правило, если вы правильно деактивируете ячейки, у вас будет выигрыш в производительности. Посмотрите пример, предоставленный Apple, я добавил к ответу. – Joe
Могу ли я ошибаться (вроде бы здесь поздно), или у этого примера есть большая проблема лениво загружать ВСЕ изображение в память? Если я прав, это решение потенциально может иметь огромное влияние на память ... –