2011-05-18 93 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

相關問題