UIImageView cargando la image muy despacio

Tengo un código que obtiene una image de una página web y la muestra en un ImageView. ¡Pero la image se carga muy lentamente por alguna razón que realmente no entiendo! A través de mi logging puedo ver que todos los datos de la image (base64 cadena) llegan bastante instantáneamente, pero toma entre 12 y 15 segundos para que la image aparezca en ImageView.

Me resulta muy extraño porque utilicé un NSStream para get los datos de la image en un método diferente y la image se cargó tan pronto como llegaron todos los datos. Pero con este método URLSession tarda más time en cargarse la image. ¡Esto realmente no tiene sentido! Este método no debe afectar la forma en que ImageView carga esos datos.

¿Alguien tiene alguna idea de por qué esto podría estar sucediendo?

aquí está el código:

- (void)postMethod:(NSDictionary *)numDict { NSURL *url = [NSURL URLWithString:@"http://theWebAddress.com/aPage.php"]; // add url to page NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *session = [NSURLSession sessionWithConfiguration:config]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; request.HTTPMethod = @"POST"; NSError *error = nil; NSData *data = [NSJSONSerialization dataWithJSONObject:numDict options:kNilOptions error:&error]; NSLog(@"%@", numDict); if (!error) { NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:data completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSDictionary *diction = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; for (id key in diction) { if ([key isEqualToString:@"text"]) { NSLog(@"data is text"); self.messageLabel.text = diction[@"text"]; break; } else if ([key isEqualToString:@"image"]) { NSLog(@"data is an image"); // gets the base64 string pretty instantly but takes 12 - 15 seconds to pop up in the imageView NSData *ImgData = [[NSData alloc] init]; ImgData = [[NSData alloc] initWithBase64EncodedString:diction[@"image"] options:1]; self.ImageView.image = [UIImage imageWithData:ImgData]; break; } } }]; [uploadTask resume]; } } 

¡Muchas gracias!

Su manejador de finalización podría estar funcionando en un hilo de background. Las actualizaciones de la interfaz de usuario siempre deberían funcionar en el hilo principal. Pon un punto de quiebre en

 self.ImageView.image = [UIImage imageWithData:ImgData]; 

y mira si está en el hilo principal. De lo contrario, envíelo al hilo principal antes de configurar ImageView.image:

 dispatch_async(dispatch_get_main_queue(), ^{ self.ImageView.image = [UIImage imageWithData:ImgData]; }); 

Puede intentar usar SDWebImage https://github.com/rs/SDWebImage y todo lo que necesita es configurar la image en imageView así:

 [cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

Primero descarga la image y luego muestra la image. Puede download la image utilizando la carga perezosa.

Para esto puede usar EgoImageView no uiimageview.

self.ImageView.imageURL = [NSURL URLWithString:

aquí self.ImageView es de tipo egoimageview.

Puedes get esta class de github.

https://github.com/enormego/EGOImagen