cela dépend de combien d'images que vous aurez besoin de demander à tout moment donné. une bonne solution que j'ai trouvée pour la conception/demande de force industrielle était de créer un entonnoir de requête (qui a réduit le nombre d'images). ces demandes ont pris en charge l'annulation (lorsque la vue de l'image est hors écran) et ont toutes été gérées via un NSOperationQueue. il y avait une tonne de travail de thread (lire: pas pour le noob) pour le rendre transparent, mais cela fonctionnait bien pour les grandes tables qui avaient beaucoup d'images (puisque le plafond est assez bas pour le nombre d'images l'appareil iOS avec le moins de mémoire).
c'est un bon moyen, si vous avez beaucoup d'images à télécharger. sinon, alors vous pouvez regarder dans l'implémentation en utilisant performSelectorInBackground: ..., et laissez simplement l'objet effectuer son propre verrouillage/gestion. de toute façon, vous devrez faire quelque chose/afficher quelque chose pendant le téléchargement de l'image, afin que le thread appelant (généralement le thread principal) ne soit pas bloqué pendant la réception de l'image.
Q :: suivi: merci mais où dois-je déclarer cette méthode ?? à l'intérieur si (sections == 3) {} - user437503
A :: il prendra la forme `générale »:
- (void)setCellImage:(UIImage *)img {
/* assert here if called from secondary thread */
myImageView.image = img;
}
- (void)udpateImageFollowingTap {
NSAutoreleasePool * pool = [NSAutoreleasePool new];
NSString * imageUrl = [self.a1 objectAtIndex:self.tap];
UIImage * tmpImage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]]];
[self performSelectorOnMainThread:@selector(setCellImage:) withObject:tmpImage];
[tmpImage release];
[pool release];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger sections = [indexPath section];
if (sections == 3) {
ltxt.text = [NSString stringWithFormat:@" %d of %d", tap,[a1 count]];
if(tap<[a1 count]-1) {
tap++;
/* insert code to discard previous image and display loading image indication here */
[self performSelectorInBackground:@selector(udpateImageFollowingTap) withObject:0];
}
}
}
si vous avez besoin d'une image par événement tap/utilisateur, performSelectorInBackground puis en utilisant une méthode va être préféré. – justin
merci mais où dois-je déclarer cette méthode ?? inside if (sections == 3) {} – prajakta
merci mais j'obtiens cette erreur [BookDetailViewController performSelectorOnMainThread: withObject:]: sélecteur non reconnu envoyé à l'instance 0x1ab8f0 je pense [self performSelectorOnMainThread: @selector (setCellImage :) withObject: tmpImage] ; est quelque chose de mal – prajakta