2011-09-21 108 views
0

問候!!NSTimer選擇器問題

我已經例如以下功能:

-(void) doMainBrick 
{ 
    NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:0.1 
                 target:self 
                selector:@selector(dropBrick:) 
                userInfo:nil 
                repeats:YES]; 
} 

-(void) dropBrick:(NSTimer*) timex 
{ 
    //deal something 
    [self SwitchBrick]; 
} 

我不知道是否有可能,如果dropBrick功能做多scheduledTimerWithTimeInterval(我上面的樣本中,它是0.1), 另一個呼叫dropBrick發生再次(每0.1秒火力下降,重複:是)? 還是不管,NSTimer會等到最後dropBrick結束然後解僱?

回答

1

NSTimers計劃在RunLoop上。

這意味着在RunLoop的每次迭代中,系統將執行以下操作:

  • 檢查是否有安排一些定時器針對他們的火時間已過。如果是這樣,則啓動相關的方法。
  • 檢查是否有其他輸入源(如RunLoop等調度的套接字)有輸入數據繼續進行,如果是這樣的話。
  • 檢查是否有事件之前,像觸摸事件,並處理它們(火災相關聯的動作)
  • 執行繪圖
  • 迭代再次

結果:

  • NSTimer不關心你是否自己手動調用dropBrick除了定時器本身觸發的調用
  • 如果方法調用b如果計時器超過指定的timeInterval,則在RunLoop迭代結束時,該方法將立即再次觸發,因爲下一次調用的啓動日期已經過去。
0

一個想法我能想到的是......

設置重複:NO,讓dropBrick遞歸調用本身。增加一些睡眠來控制遞歸調用的頻率。