Возможно ли предотвращение удаления UITableViewCell из очереди? - PullRequest
0 голосов
/ 07 июня 2009

Я использую часть Three20 библиотеки в проекте. В частности, представление, которое по существу является табличным, с изображениями, проходящими по 4 ширины в каждой ячейке, чтобы имитировать представление миниатюр фото приложения iPhone.

Я заметил, что поведение каждой ячейки отключается, как только нижняя часть ячейки достигает нижней части навигационной панели (которая является полупрозрачной, поэтому мы можем фактически увидеть ее исчезновение). Проблема, которую это представляет, состоит в том, что каждый раз, когда ячейка отключается и затем возвращается в поле зрения, она перезагружает изображения, что приводит к тому, что прокрутка становится очень нервной в любом месте, кроме медленной прокрутки таблицы. Я знаю, что ячейки используются повторно, чтобы минимизировать использование памяти, но возможно ли предотвратить блокировку ячеек? Или переопределите «границу» для того времени, когда они подготовлены для повторного использования, чтобы создать больший буфер, чтобы они исчезали только тогда, когда они выходят за пределы определенного количества строк?

Ответы [ 4 ]

2 голосов
/ 07 июня 2009

У вас есть обратный ход назад. UITableView не удаляется. Вы делаете это, когда звоните -dequeueResusableCellWithIdentifier:. «Отменить» не значит «освободить». Это означает «вытянуть очередь из кэшированных больше не используемых повторно используемых ячеек». Это называется «снятие очереди», потому что это очередь ячеек FIFO, а вы вытаскиваете первую.

Если прокрутка медленная, вам нужно улучшить скорость рисования, и, возможно, вам нужно быстрее возвращать ячейки, когда UITableView запрашивает их. Система удаления многоразовых ячеек не предназначена для экономии памяти (на самом деле она стоит памяти); это для улучшения производительности. Вы не хотите обойти это; это именно та ситуация, которую нужно исправить.

Итак, как вы рисуете эти ячейки и как настраиваете их, когда UITableView запрашивает одну? Вот где мы найдем улучшение вашей производительности.

0 голосов
/ 06 июня 2012

Попробуйте изменить его идентификатор повторного использования. И затем, если вы хотите сделать его удаляемым, снова измените идентификатор. Я еще не пробовал, но это может сработать!

0 голосов
/ 07 июня 2009

Вы можете попробовать поместить ваши изображения в NSMutableDictionary. В том месте, где вы строите свою ячейку, убедитесь, что изображение, которое вы хотите, уже сохранено. Если это так, используйте эту копию, если не загрузите ее, откуда вы получаете изображения, и поместите ее в словарь. Я думаю, что я использовал NSMutableDictionary с идентификатором изображения в качестве ключа и изображение в качестве значения, чтобы сделать это, и это ускорило прокрутку таблицы.

Возможно, вы захотите выгрузить NSMutableDictionary, если получите предупреждение о памяти.

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

Предварительная загрузка изображений с URL в TableViewCell

0 голосов
/ 07 июня 2009

Полагаю, вы хотите изменить рамку табличного представления, включив в нее область панели навигации.

[self.tableView setFrame:GCRectMake(0,0,320,480)];

Следует помнить, что это может вызвать некоторые другие проблемы, поскольку эта область будет считаться видимой областью, и вы не сможете прокрутить первую ячейку из-под вашей полупрозрачной панели навигации. Чтобы обойти это, вам также может понадобиться установить tableView.tableHeaderView в пустое значение UIView, соответствующее высоте UINavigationBar

.

(теоретически у вас могут быть такие же проблемы с UITabBar внизу вашего представления).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...