2012-01-22 41 views
1

在這裏,我有這樣的:NSTimer的問題:錯誤的邏輯?

void start() { for (id i in something) { [i start]; } } 
void finish() { for (id i in something) { [i finish]; } } 

static NSTimer *timer = nil; 

@implementation aClass 
- (void)start { 
    if (!timer) timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(change) userInfo:nil repeats:YES]; 
} 

- (void)change { /* ... */ } 
- (void)finish { [timer invalidate]; } 
@end 

請注意,我不能使用實例變量,正如你可以假設有很多有-start稱爲aClass實例。

我想我在這裏面對一個我自己的邏輯問題,因爲只有一個實例(第一個調用-start)得到-change同時被調用。這對其他實例不是問題,因爲如果我從something陣列中刪除第一個對象,那麼第二個對象將會正常,而其他對象將面臨問題。

我只是犯了一些明顯的錯誤? (我認爲我;試圖對每個實例使用相同的全局...)。我該如何解決這個問題?

回答

3

您正在使用靜態NSTimer變量,這意味着您的所有類的實例只有一個timer指針。第一個調用-start的實例會將計時器的目標設置爲自己,其他人不會執行任何操作,因爲timer不再是nil

你將不得不使用伊娃爲timer指針,我不明白爲什麼這應該是一個問題...

+0

同樣,我**不能**使用高德。 (如果可以的話,這個答案雖然會解決我的問題。) – Matoe

+0

爲什麼不呢?您可以使用關聯的對象。 –

+0

我也想到了這一點,而且我有幾個問題。我會再試一次,謝謝! – Matoe