У меня есть UITableView с примерно 400 ячейками в 200 разделах и немного вяло реагирует на взаимодействие с пользователем (прокрутка, выбор ячеек). Я убедился, что методы для извлечения ячеек и заголовков минимально минимальны. и я не думаю, что я делаю что-то необычное, чтобы сделать его медленным. Ячейки и заголовки имеют только фоновое изображение и текст. У кого-нибудь еще была такая проблема, и знаете ли вы каким-либо способом заставить ее работать немного быстрее?
Изменить: Я предлагаю щедрость, потому что я хотел бы получить полезную информацию об этом. Я не думаю, что ответ кроется в проблеме в моем коде. Вместо этого я ищу стратегии для реорганизации UITableView, чтобы он работал быстрее. Я полностью открыт для добавления нового кода, и я с нетерпением жду того, что вы, ребята, должны сказать.
Вялость наблюдается как на симуляторе, так и на моем устройстве, iPhone 4. Вот мои реализации viewForHeaderInSection
и cellForRowAtIndexPath
, которые являются единственными UITableViewDelegate
методами, реализованными нетривиально. Я повторно использую ячейки и заголовки.
- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger) section
{
HaikuHeaderView* view= [m_sectionViews objectAtIndex:section];
NSMutableArray* array= [m_haikuSearch objectAtIndex:section];
Haiku* haiku= [array objectAtIndex:0];
[view.poetLabel setText:[haiku nameForDisplay]];
return view;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
cell.backgroundView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cell gradient2.png"]];
// (Set up a bunch of label attributes in the cell...)
}
NSMutableArray* array= [m_haikuSearch objectAtIndex:indexPath.section];
Haiku* haiku = [array objectAtIndex:indexPath.row];
cell.textLabel.text = [haiku.m_lines objectAtIndex:0];
return cell;
}