2011-06-14 21 views
2

我試圖同時使用:iOS:爲什麼計時器(和performSelector)立即觸發選定的方法?

[NSTimer scheduledTimerWithTimeInterval:2.0 
            target:self 
            selector:@selector(enableGestures) 
            userInfo:nil 
            repeats:NO]; 

[self performSelector:@selector(enableGestures) withObject:nil afterDelay:2.0]; 

觸發enableGestures方法,但在這兩個版本中,它被觸發兩次! (首先在計時器開始時和第二秒後)。與第二個片段相同的東西。爲什麼?

感謝

+3

這沒有任何意義。沒有辦法'performSelector ... afterDelay'會立即觸發。您可能需要顯示一些周圍的代碼。 – 2011-06-14 11:44:08

+0

你在做什麼'enableGestures'? – 2011-06-14 11:58:28

回答

1

scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:消息的選擇應該有這樣的簽名:

- (void)enableGestures:(NSTimer*)theTimer 

我寫了一個小的測試代碼,而無需爲選擇恰當的署名,選擇有時馬上打電話,然後當定時器結束時再次。當我將其更改爲正確的簽名時,選擇器會在適當的延遲後首先調用。我從來沒有看到這個問題的格式正確的簽名,大約一半的時間看到這個問題與不正確的簽名。

我試過了第二個版本,它每次都正確地工作。

如果這與兩個版本的計時代碼一致發生,則代碼中的某處發送enableGestures消息。

相關問題