2010-11-19 103 views
2

我有一個關於NSTimer的問題,我在.h文件中聲明並稍後在方法中設置。但是這個方法會被稱爲多於一個,所以NSTimer在同一個名字下運行多次。Objective-c iPhone NSTimer唯一標識符

現在我的問題是,是否有可能設置標記/ ID或任何所以我可以使NSTimer與正確的標記/ ID無效?

感謝您的幫助!

回答

3

這個問題很久以前就問過,但因爲我今天有同樣的需要,這是我的解決方案:

// set timer 
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 
             target:self 
             selector:@selector(whateverMethod) 
             userInfo:@"timer1" 
             repeats:YES]; 

要使相同的定時器無效,請檢查其userInfo字符串:

// invalidate timer 
if ([[timer userInfo] isEqual:@"timer1"]) 
    [timer invalidate]; 
+0

** [timer userInfo] **返回時的nil值ViewController。 – 2016-02-18 10:56:56

1

您只需保存對您創建並正在運行的NSTimer的引用 - 並僅使用此引用即可。

1

如果您正在創建多個NSTimers,並且您在意獨立處理它們,則需要獨立存儲它們。如果有一個固定的數字,只需創建足夠的變量並適當地命名它們。或者將它們保存在一個數組中(然後通過索引鍵入)。或者把它們放在一個字典中,用一些字符串名稱作爲鍵。

你上面的措辭(「以同樣的名義運行」)對我有點擔心。定時器有一些敏感的內存處理要求。如果您想要更廣泛的設計幫助,請編輯您的問題,詳細說明您正在做什麼。

1

奧克,我現在有下面的代碼。但是有沒有辦法設置一個唯一的ID /標籤,所以我可以在稍後的時刻使計時器失效。這是因爲計時器方法會調用更多的。 (其動畫圖像/按鈕)

MainViewController.m

- (void)timerMethod { 

    NSTimer *daTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(animations:) userInfo:nil repeats:YES]; 

}