¿Cómo pausar y reiniciar un NSTimer cuando desaparece la vista?

Estoy usando un NSTimer en mi class de vista que se llama cada 15 segundos. Mi problema es que funciona correctamente, pero mi aplicación se está volviendo lenta, porque muestra su performance a toda la aplicación. Así que quiero pausar el NSTimer cuando mi vista desaparece de su vista de supervisión y reiniciar el timer cuando aparece. Por favor, ayúdame a resolver el problema. Aquí está mi código:

 - (void) viewWillAppear:(BOOL)animated { if(!Thread_bool) { //[spinner startAnimating]; NSTimer *timer_new1=[[NSTimer alloc] init]; timer_new1=[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(threadMethod) userInfo:nil repeats:YES]; self.timer_new=timer_new1; [timer_new1 release]; [self.tableView setEditing:NO]; isEditing=NO; Thread_bool=YES; } } -(void)viewWillDisappear:(BOOL)animated { [self.timer_new invalidate]; timer_new=nil; } 

 NSTimer *timer_new1=[[NSTimer alloc] init]; timer_new1=[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(threadMethod) userInfo:nil repeats:YES]; self.timer_new=timer_new1; [timer_new1 release]; 

En primera línea, ha asignado un timer y en segunda línea se crea otro timer y se le asigna timer_new1 . Entonces perdiste la reference al timer que se asignó en la línea anterior y que se filtró. No necesita la asignación de primera línea. Hacer esto:

 NSTimer *timer_new1 = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(threadMethod) userInfo:nil repeats:YES]; 

Y elimine [timer_new1 release]; (Estoy asumiendo que self.timer_new se retiene). También en vista viewWillDisappear do self.timer_new = nil; en lugar de timer_new=nil; . Agregando ese self llamará al progtwigdor y liberará correctamente el timer anterior.

Tienes dos líneas allí que están creando una instancia de NSTimer . El primero es

  NSTimer *timer_new1 = [[NSTimer alloc] init]; 

y el segundo es

  timer_new1 = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(threadMethod) userInfo:nil repeats:YES]; 

Se NSTimer object NSTimer creado por la primera línea, del que parece estar al tanto porque está intentando liberarlo más tarde. Sin embargo, la segunda línea anterior está creando una nueva instancia de NSTimer, que se autorealiza . ¡Cuando haces esto, el primer object NSTimer no lanzado se está filtrando!

Si ha configurado su método accessor para timer_new para conservar el timer, elimine la primera línea desde arriba y no suelte timer_new1 .