2013-03-19 83 views
2

我有一個真正的NSTimer對象的怪異行爲。類中的NSTimer的奇怪行爲

我試圖撥打ChangePic方法重複計數2秒,但計時器不重複。和我有這個問題只在1級項目

我在我的應用程序5個視圖控制器,同樣的代碼在所有類,除了這一個。 有誰知道它怎麼可能?是否有可能阻止計時器?

-BTW,ChangePic只調用一次方法,不重複。

我的代碼:

ViewController.h

@property (nonatomic, strong) NSTimer *timer; 

ViewController.m

_timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(ChangePic) userInfo:nil repeats:YES]; 
[_timer fire]; 

-(void) ChangePic { 
    NSLog(@"testing"); 
} 
+1

我完全複製並粘貼代碼到項目中,它工作得很好。你應該搜索錯誤代碼的其他部分,我認爲 – meth 2013-03-19 22:20:35

+0

P.S.無需調用'fire',定時器將立即開始。 – Hejazi 2013-03-19 22:22:04

+0

我不認爲問題出現在您發佈的代碼中。在別處看看。 ChangePic()是否觸發過一次或根本不觸發? – 2013-03-19 22:29:09

回答

3

它分配給屬性不爲後盾變量。

self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(ChangePic) userInfo:nil repeats:YES]; 
+2

這對問題沒有影響。使用ARC,分配給'_timer'或'self.timer'是同樣的事情(內存管理明智)。 – rmaddy 2013-03-19 22:12:36

+0

問題中沒有提到ARC。 – Gary 2013-03-19 22:16:44

+0

當然有。看看財產聲明。它使用'strong',而不是'retain'。 – rmaddy 2013-03-19 22:17:27

0

很難確切地說出你的問題給出的是沒有給出很多背景。我可以告訴你,我回答了另一個問題,問題是其中一個觀點阻止計時器。定時器可以運行在多種不同的模式下,不同的場景會導致定時器有時被阻塞。試着增加計時器這樣所有常見的模式:

[[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes]; 

此外,像@Hejazi說,除去「火」的方法調用。在預定的計時器上不需要它。

+0

我試過了,沒有工作。 我也嘗試從當前ViewController中刪除所有視圖,並且它也有同樣的問題。 順便說一句,當我刪除火方法> ChangePic <方法沒有被調用。當我加回來的時候,它確實如此。 – user1044303 2013-03-20 10:10:01

+0

然後我同意@MarcusAdams,問題一定在別的地方。您可以發佈此視圖控制器創建或用於我們審查的任何點的代碼,或者您可以開始設置斷點並檢查此視圖控制器的值和計時器屬性,以確保它們不會無零「 d在任何時候。自從你提到沒有'火'的方法,它根本不會被調用,這在其他地方顯然是個問題。情況並非如此。 scheduledTimer ...方法應該自動啓動計時器。這是一個很好的指標,表明某件事情不合適。 – JiuJitsuCoder 2013-03-20 14:31:58