如何在视图消失时暂停和重新启动NSTimer?

gir*_*ish 2 cocoa-touch objective-c nstimer ios

NSTimer在我的视图类中使用一个每15秒调用一次.我的问题是,它工作正常,但我的应用程序变慢,因为它显示了整个应用程序的性能.所以我想暂停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;  
}
Run Code Online (Sandbox Code Playgroud)

tas*_*oor 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];
Run Code Online (Sandbox Code Playgroud)

在第一行中,您已分配一个计时器,在第二行中,另一个计时器已创建并分配给timer_new1.因此,您丢失了对前一行中分配的计时器的引用,并且该计时器已泄露.您不需要第一行alloc.做这个:

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

并删除[timer_new1 release];(我假设self.timer_new保留).也在viewWillDisappearself.timer_new = nil;而不是timer_new=nil;.添加self它将调用setter并正确释放先前的计时器.