NSTimer有时只会发射?

时间:2011-08-12 06:10:51

标签: iphone ios ios4 iphone-sdk-3.0

我遇到了我的计时器随机无法正常工作的问题。我可以直接停止应用程序并在不更改任何代码的情况下重建它。它有时有效,有时不行吗? 当我说“有时”我说的是每个应用程序会话。如果它启动,它将继续运行。但它没有运行每个应用程序会话。 我在下面使用两个代码块时都看到同样的事情。

//Code1:
//I tried this block of code after reading it might be related to how I am interacting with my UIElements while the timer is running in the background.
NSRunLoop *runloop = [NSRunLoop currentRunLoop];
syncWithServerTimer = [NSTimer timerWithTimeInterval:15 target:self selector:@selector(syncWithServer) userInfo:nil repeats:YES];
[runloop addTimer:syncWithServerTimer forMode:NSRunLoopCommonModes];
[runloop addTimer:syncWithServerTimer forMode:UITrackingRunLoopMode];

//Code2:
syncWithServerTimer = [[NSTimer scheduledTimerWithTimeInterval:15 target:self selector:@selector(syncWithServer) userInfo:nil repeats:YES] retain];

同样,我尝试了这两种方法,但它们都在大部分时间都有效,但并非所有时间都有效。 可能是什么问题?我没有过早地释放或无效。

2 个答案:

答案 0 :(得分:1)

所以我想最好在主线上开启你的计时器! 我现在每次都这样做似乎工作。

[self performSelectorOnMainThread:@selector(startTimer) withObject:nil waitUntilDone:NO];

答案 1 :(得分:0)

您所看到的问题(根据您的回答判断)是计时器被与运行循环一起销毁。如果你在运行循环上安排/添加一个计时器,运行循环将不会运行,直到所有计时器都用完为止。

如果你的计时器应该具有主线程的生命周期,或者你不能保证运行循环仍然存在,那么将它添加到主线程(虽然严格来说,这也不能保证计时器将自动启动主运行循环可以退出)。