Как я кэширую что-то для tableview?

Простое решение. Вид. Если Вы не можете использовать что-то как карта флэш-памяти с интерфейсом USB, поместите пароль на свой ключ SSH. Мгновенная двухфакторная аутентификация (вид). Вы не должны даже загружать новый открытый ключ.

8
задан Jonah 5 September 2009 в 03:50
поделиться

1 ответ

Кэширование не является панацеей для производительности табличных представлений. Кэширование полезно только в том случае, если есть что-то дорогостоящее для расчета, и вы можете избежать этого. Если, с другой стороны, у вас просто слишком много представлений в вашем UITableViewCell, то кеширование вам ничего не даст. Если высота ваших строк одинакова, то кешировать нечего. Если вы используете + [UIImage imageNamed:] , то система уже кэширует ваши изображения за вас.

Самая распространенная проблема первого порядка с UITableViewCells заключается в размещении в них слишком большого количества подвидов. Как вы построили свою камеру? Вы потратили время на изучение Руководства по программированию табличного представления, особенно Более пристальный взгляд на ячейки табличного представления ? Понимание этого документа избавит вас от многих проблем позже.

РЕДАКТИРОВАТЬ: (На основе кода выше)

Во-первых, вы извлекаете повторно используемую ячейку, а затем сразу ее выбрасываете, читаете NIB и перебираете все объекты верхнего уровня в поисках ячейки (той, которая выглядит почти так же, как та, которую вы только что выбросили). Затем вы составляете строку, которую используете для открытия файла и чтения его содержимого. Вы делаете это каждый раз, когда UITableView хочет новую ячейку, а это много. И вы делаете это снова и снова для одних и тех же строк.

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

Вам следует начать с чтения Руководства по программированию UITableView, которое я приведу выше. Надеюсь, это очень поможет. Когда вы это сделаете, вам следует подумать о следующих вещах:

  • Вы указали, что в этой ячейке нет ничего, кроме просмотра одного изображения. Вам действительно нужен СИБ для этого? Если вы все же придерживаетесь NIB (и в некоторых случаях есть причины использовать их), то прочтите Руководство по программированию о том, как реализовать базовую ячейку NIB. Вы должны использовать IBOutlet , а не пытаться перебирать объекты верхнего уровня.

  • + [UIImage imageNamed:] автоматически найдет файлы в вашем каталоге ресурсов без необходимости выполнять путь пакета. Он также будет кэшировать эти изображения автоматически.

  • Смысл -dequeueReusableCellWithIdentifier: заключается в том, чтобы получить ячейку, которую UITableView больше не использует и которую вы можете перенастроить, а не вы делаю новый. Вы звоните, но сразу выкидываете. Вы должны проверить, вернул ли он nil, и загружать его только из NIB, если это так. В противном случае вам просто нужно сменить изображение. Снова прочтите Руководство по программированию; у него много, много примеров этого. Просто убедитесь, что вы действительно пытаетесь понять, что делает -dequeueReusableCellWithIdentifier: , и не относитесь к этому как к чему-то, что вы набираете на этом этапе программы.

16
ответ дан 5 December 2019 в 07:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: