J'ai un UITableView et j'ajoute l'affichage personnalisé à la cellule. Il traîne vraiment mais avec seulement 2 cellules. Voici à quoi ça ressemble, quand je le fais défiler de haut en bas, je peux le voir bégayer/retarder tellement (c'est sur l'iPhone 4s). J'ai regardé App Store App et le défilement avec tableviewcell très complexe est verrryyy lisse. Est-ce que je fais quelque chose de mal?UITableView en retard vraiment mauvais avec seulement 2 cellules
Voici mon code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
int row = [indexPath row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
UILabel *labelBarcode = [[UILabel alloc] initWithFrame:CGRectMake(80, 7, 150, 15)];
[labelBarcode setFont:[UIFont fontWithName:@"Helvetica-Bold" size:16]];
[labelBarcode setTag:10];
UILabel *labelLength = [[UILabel alloc] initWithFrame:CGRectMake(80, 22, 150, 15)];
[labelLength setFont:[UIFont fontWithName:@"Helvetica" size:14]];
[labelLength setTag:11];
UILabel *labelThickness = [[UILabel alloc] initWithFrame:CGRectMake(80, 37, 150, 15)];
[labelThickness setFont:[UIFont fontWithName:@"Helvetica" size:14]];
[labelThickness setTag:12];
UILabel *labelDiameter = [[UILabel alloc] initWithFrame:CGRectMake(190, 22, 100, 15)];
[labelDiameter setFont:[UIFont fontWithName:@"Helvetica" size:14]];
[labelDiameter setTag:13];
UILabel *labelCoating = [[UILabel alloc] initWithFrame:CGRectMake(190, 37, 100, 15)];
[labelCoating setFont:[UIFont fontWithName:@"Helvetica" size:14]];
[labelCoating setTag:14];
UIImageView *thumbView = [[UIImageView alloc] initWithFrame:CGRectMake(4, 4, 65, 50)];
[thumbView setContentMode:UIViewContentModeScaleToFill];
[thumbView setTag:15];
[[cell contentView] addSubview:thumbView];
[[cell contentView] addSubview:labelBarcode];
[[cell contentView] addSubview:labelLength];
[[cell contentView] addSubview:labelThickness];
[[cell contentView] addSubview:labelDiameter];
[[cell contentView] addSubview:labelCoating];
[thumbView release];
[labelBarcode release];
[labelLength release];
[labelThickness release];
[labelDiameter release];
[labelCoating release];
}
UILabel *labelBarcode = (UILabel *)[[cell contentView] viewWithTag:10];
UILabel *labelLength = (UILabel *)[[cell contentView] viewWithTag:11];
UILabel *labelThickness = (UILabel *)[[cell contentView] viewWithTag:12];
UILabel *labelDiameter = (UILabel *)[[cell contentView] viewWithTag:13];
UILabel *labelCoating = (UILabel *)[[cell contentView] viewWithTag:14];
UIImageView *thumbView = (UIImageView *)[[cell contentView] viewWithTag:15];
NSDictionary *pipe = [pipes objectAtIndex:row];
NSString *stringBarcode = [pipe objectForKey:@"Barcode"];
NSString *stringLength = [NSString stringWithFormat:@"Length: %@", [pipe objectForKey:@"Length"]];
NSString *stringThickness = [NSString stringWithFormat:@"Wall: %@",[pipe objectForKey:@"Thickness"]];
NSString *stringCoating = [NSString stringWithFormat:@"Coating: %@", [pipe objectForKey:@"Coating"]];
NSString *stringDiameter = [NSString stringWithFormat:@"Diameter: %@",[pipe objectForKey:@"Diameter"]];
[labelBarcode setText:stringBarcode];
[labelLength setText:stringLength];
[labelThickness setText:stringThickness];
[labelDiameter setText:stringDiameter];
[labelCoating setText:stringCoating];
[thumbView setImage:[UIImage imageWithData:[pipe objectForKey:@"Thumbnail"]]];
return cell;
}
Le retard se produit surtout quand je charge le UITableViewController. Notez que je ne fais rien d'allocation, je n'alloue que des données (à partir d'un plist) lorsque l'application se charge, et la consommation totale de mémoire d'application est à 1,56 mb.
Ce n'est pas approprié parce que chaque tuyau a vraisemblablement une vignette différente. Toujours en train d'exécuter ce code sur le thread principal, ce qui va tuer la performance. –
Ahh ok - j'ai mal lu le code, mon erreur. J'ai eu l'impression que le thumbview était toujours le même. – barfoon