2015-02-09 89 views
-2
-(void)DataShow 

{ 
    for(k=1;k<=10;k++) 

    { 
     Timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self  
     selector:@selector(LabelUpdateOfTimer) userInfo:nil 
     repeats:YES]; 

     if(k>=10) 

     { 
      break; 

     } 

    } 
    [Timer invalidate]; 
    Timer=nil; 
} 

-(void)LabelUpdateOfTimer 

{ 

    NSString *temp; 
    j=j-0.1; 
    temp=[[NSString alloc]initWithFormat:@" %f",j]; 
    TimerLabel.text=temp; 
} 

在這裏,我創建了一個計時器,當它執行10次,我想停止計時器,但它不停止它仍然繼續。NSTimer無效不會停止計時器

+2

你實際上正在創建10個定時器。 – sbooth 2015-02-09 13:05:30

回答

5

在您的for循環內部,您將創建10個定時器,每個增量爲k。如果你想讓你的定時器只觸發10次,你可以在定時器調用的選擇器內跟蹤它。

- (void) someMethod 
{ 
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES]; 
} 

- (void) timerFireMethod:(NSTimer *)timer 
{ 
    static NSInteger fireCount = 0; 

    ++fireCount; 

    if(10 <= fireCount) 
     [timer invalidate]; 

    // Do some actual work 
} 

我推薦閱讀C控制結構的基本介紹,以更好地理解語言語法。

+0

非常感謝清除定時器的概念 – 2015-02-10 09:15:24

1

我會解釋一下我在想什麼。如果我錯了,隨時糾正我。

想象一下Timer變量是皮帶。當你生出一隻狗時,它會被綁在皮帶上。並且當一個新的產卵時,皮帶從舊狗被釋放並且被捆綁新的一個。老狗是免費的,除非我們已經將它綁在另一個皮帶上(variable),否則我們無法從這裏控制或訪問它。

你所做的是關閉10個NSTimer變量並將其分配給Timer變量。每次創建一個新的時,以前由Timer保存的定時器都會從變量中鬆開,但仍然會繼續在後臺運行。

然後,在for循環之外,將使最後一個循環無效(仍由Timer變量保存)。其他9將繼續永遠運行,除非你可以得到他們的參考,然後停止他們,你不能。擺脫循環,並啓動一個計時器。並檢查選擇器內部調用的次數。 @sbooth的代碼將會做到這一點。

希望它清楚。

+0

不錯的比喻,拯救產卵狗的心理形象! – sbooth 2015-02-09 15:00:15