2011-05-18 95 views
2

我在我的视图类中每隔15秒调用一次NSTimer。我的问题是,它工作正常,但我的应用程序变得越来越慢,因为它正在向整个应用程序显示其性能。所以我想暂停NSTimer,当我的视图从它的超级视图中消失,并在出现时重新启动计时器。请帮我解决问题。这里是我的代码:如何在视图消失时暂停并重新启动NSTimer?

- (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; 
} 
+0

可能重复的[暂停NSTimer](http://stackoverflow.com/questions/5862743/pausing-an-nstimer) – 2011-05-18 18:49:38

回答

8
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]; 

在第一线已alloced一个计时器和在第二行被创建另一个定时器并分配给timer_new1。所以你失去了在前一行被分配的计时器的引用,并且泄漏了。你不需要第一行分配。这样做:

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

,并删除[timer_new1 release];(我假设self.timer_new保持不变)。同样在viewWillDisappearself.timer_new = nil;而不是timer_new=nil;。添加self将调用setter并正确释放前一个计时器。

+0

嗨taskinoor它不工作可以请你给这个..任何建议..事实上,我已经返回此代码在viewWillAppear.if我选项卡另一个选项卡,如果我回到同一个选项卡计时器不工作..请给我任何解决方案。 – girish 2011-05-18 14:03:07

+0

在ViewWillDisappear中添加Thread_bool = NO或从viewWillAppear中删除if,除非您没有在其他位置设置Thread_bool = NO。 – taskinoor 2011-05-18 14:08:58

2

你有两行创建一个NSTimer的实例。首先是

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

,第二个是

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

保持第一线创建的NSTimer对象,你似乎是知道的,因为你想晚些时候发布它。但是,上面的第二行正在创建NSTimer的新实例,即自动发布的。当您这样做时,第一个未发布的NSTimer对象正在泄漏!

如果您已经设置了访问方法timer_new保留计时器,然后从上面删除第一行和发布timer_new1

+0

嗨查理其不工作可以请给任何建议在这..事实上,我有返回此代码viewWillAppear.if我选项卡另一个选项卡,如果我返回到相同的选项卡计时器不工作..请给我提供任何解决方案 – girish 2011-05-18 13:59:56

+0

嗯,当你第一次创建计时器,你设置Thread_bool为YES。因此,除非您将其设置为NO,否则当您从另一个选项卡返回时,viewWillAppear中的计时器设置代码不会运行。尝试从viewWillAppear中删除if()以查看它是否可用。 – CharlieMezak 2011-05-18 14:02:36

相关问题