Thread still running of old view

Tengo una aplicación donde hay cinco pantallas.

En cada pantalla, en viewDidLoad estoy accediendo a los datos del server.

En cada pantalla tengo el siguiente button.

Cuando voy de la pantalla uno a la pantalla cinco (haciendo clic en Siguiente 4 veces), en NSLog, todavía veo el process realizado por todos los cuatro controlleres de vista anteriores.

¿Hay alguna forma de cómo puedo matar esos hilos?

En resumen, no quiero hacer ningún process cuando me alejo de esa vista, es decir, si paso de la vista 3 a la 4, quiero detener la tarea que tenía para la vista 3 .

Obtener datos de vistas anteriores y esperar esos datos (que no son deseados ) no es bueno para la aplicación, por lo tanto, quiero lo que expliqué anteriormente.


Edit 1

A continuación se muestra el código que uso para leer los datos.

.marido

@property(nonatomic, retain) NSMutableData *webData; @property(nonatomic, retain) NSMutableData *data; 

Utilizando a continuación solicito los datos

.metro

 NSString *myTMainURL = [NSString stringWithFormat:@"http://www.google.com"]; NSURL *url = [NSURL URLWithString:myTMainURL]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

Para leer, a continuación se muestra cómo lo leo.

 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"didReceiveResponse"); data = [[NSMutableData alloc] init ]; [webData setLength: 0]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)theData { NSLog(@"didReceiveData"); [data appendData:theData]; [webData appendData:data]; NSLog(@"didreceveidata leng===%d===%d", [webData length], [data length]); } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"connectionDidFinishLoading"); NSString *myDataFromLink = [[NSString alloc] initWithBytes: [data mutableBytes] length:[data length] encoding:NSUTF8StringEncoding]; NSLog(@"myDataFromLink====%@--", myDataFromLink); } 

En viewWillDisappear: enviar cancel a cualquier operación que se esté ejecutando.

Esto, por supuesto, supone que tiene una tarea / método / operación cancelable .

Por ejemplo, para las requestes de networking, si utiliza NSURLConnection este es el caso cuando emplea el enfoque delegado. Con el conveniente método de class de sendAsynchronousRequest:queue:completionHandler: esto no es posible. Por lo tanto, cualquier aplicación seria utilizaría el enfoque delegado, ya que una operación asíncrona de larga ejecución debe ser cancelable.

Puede usar NSOperation y cancelar la operación cuando vaya a la siguiente vista puede estar en la acción del siguiente button o simplemente en la vista viewWillDisappear: method

Editar

Como está utilizando NSURLConnection, puede llamar a cancel en la connection en viewWillDisappear:

.marido

 @property(nonatomic, retain) NSMutableData *webData; @property(nonatomic, retain) NSMutableData *data; @property(nonatomic, retain) NSURLConnection *connection; 

.metro

 NSString *myTMainURL = [NSString stringWithFormat:@"http://www.google.com"]; NSURL *url = [NSURL URLWithString:myTMainURL]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

en vista viewWillDisappear:

 [self.connection cancel] 

Como está utilizando NSURLConnection, puede cancelar esa connection y detener la NSURLRequest que está utilizando con su NSURLConnection con el siguiente código:

 -(void)viewDidDisappear { [super viewDidDisappear]; [connection cancel]; // Here connection is your NSURLConnection object. }