nessence a beaucoup de bonnes informations. Quelques pensées de plus:
Vous fuyez comme un fou ici. Chaque cellule que vous créez, vous fuire 2 UILabels, un UIImageView et un UIImage.
Comme indiqué précédemment, non seulement vous les fuyez, mais ils s'accumulent à votre vue parce que vous les collez les uns sur les autres avec addSubview :.
Atteindre le réseau pendant un prélèvement de cellules est incroyablement lent et bloque votre interface utilisateur. Si ces URL sont locales, vous pouvez utiliser + imageWithContentsOfFile de UIImage, sinon, vous devez charger ceci en arrière-plan.
Je ne pense pas que vous ayez besoin d'un fil ici. NSURLConnection est un excellent moyen de charger des données en arrière-plan sans encourir la surcharge du thread.
nessence est complètement correct que vous avez besoin d'une classe de modèle pour Story. Votre approche de base de la configuration des cellules réutilisables est incorrecte.
Vous ne récupérez pas une cellule réutilisable, puis ajoutez des sous-vues à celle-ci. Toutes vos sous-vues doivent être ajoutées dans le bloc if() pour créer la cellule. Ensuite, à chaque passage, vous changez simplement les valeurs des choses. J'ai réécrit une partie de votre code ci-dessous pour le démontrer. Ce code n'est toujours pas correct, car il atteint le réseau lors d'un tirage de cellule, et il peut y avoir trop d'éléments dans une cellule de sous-vue (plutôt qu'une cellule personnalisée), mais c'est plus proche de la bonne idée. Je ne sais même pas si cela compile; Je l'ai juste tapé ici.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
// Here we do all our cell creation
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
// Make the label
CGRect aframe = CGRectMake(80, 30, 250, 40);
UILabel *textLabel = [[[UILabel alloc] initWithFrame:aframe] autorelease]; // Note the -autorelease so we don't leak
textLabel.font = [UIFont boldSystemFontOfSize:14];
textLabel.numberOfLines=0;
textLabel.textColor = [UIColor darkTextColor];
textLabel.backgroundColor = [UIColor whiteColor];
textLabel.tag = DescriptionTag; // A tag so we can find it later (you'll need a constant for this)
[cell.contentView addSubview:textLabel];
// And the second label
aframe = CGRectMake(80, 30, 250, 40);
textLabel = [[[UILabel alloc] initWithFrame:aframe] autorelease];
textLabel.font = [UIFont boldSystemFontOfSize:14];
textLabel.numberOfLines=0;
textLabel.textColor = [UIColor darkTextColor];
textLabel.backgroundColor = [UIColor whiteColor];
textLabel.tag = TitleTag;
[cell.contentView addSubview:textLabel];
// The image view
CGRect frame = CGRectMake(0, 0, 70,80);
UIImageView *topImageView = [[[UIImageView alloc] init] autorelease];
topImageView.frame = frame;
topImageView.tag = TopImageTag;
[cell.contentView addSubview:topImageView];
}
// all the above was cell creation; we do that as seldom as possible.
// Now we do cell configuration. We want this to be fast.
UILabel *descriptionLabel = (UILabel*)[cell.contentView viewWithTag:DescriptionTag];
descriptionLabel.text = itemDescription;
UILabel *titleLabel = (UILabel*)[cell.contentView viewWithTag:TitleTag];
titleLabel.text =[[stories objectAtIndex:indexPath.row] objectForKey:@"title"];
NSString *imageURLString = [m_imglinkArray objectAtIndex:storyIndex]; // You should have a model class called Story, not two arrays.
UIImage *image = [[[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURLString]]] autorelease]; // This is still way too slow if it's a remote URL
UIImageView *imageView = (UIImageView*)[cell.contentView viewWithTag:TopImageTag];
imageView.image = image;
return cell;
}
Je vous recommande de passer un peu de temps de qualité étudier TableViewSuite, Practical Memory Management et Coding Guidelines for Cocoa. Un peu de temps à étudier les bases du cacao serait également utile, car le style de codage indique que vous n'avez peut-être pas de base solide. Bien que ce soit un livre Mac, je recommande toujours Cocoa Programming for Mac OS X. Si vous êtes intéressé à utiliser ceci pour apprendre l'iPhone, j'ai mis en place un syllabus qui pourrait aider. Je ne l'ai pas encore examiné, mais le CS193P course de Stanford en ligne semble prometteur.
vous devez améliorer la mise en forme de vous remettre en question parce que son pas lisible ... –