在同一个UIViewControllers中使用2个NSTimer

时间:2011-11-04 12:14:16

标签: iphone nstimer

在我的viewDidLoad方法中,我有以下内容:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self repeatRequest];
    [NSTimer scheduledTimerWithTimeInterval:30.0 target: self selector: @selector(repeatRequest) userInfo: nil repeats: YES];
    [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
}

以下是被调用的方法:

- (void) repeatRequest{
    NSLog(@"backgroundRequest");
  }

- (void) onTimer{
    NSLog(@"flip pages");
}

事情是一切都运行良好2分钟,方法被调用为设置...但之后一切都误入歧途,onTimer方法每秒钟调用一次,而不是五秒钟。 repeatrequest被更频繁地调用它应该是。任何人都知道可能是哪个原因?

2 个答案:

答案 0 :(得分:0)

你还没有真正给我们提供过多的信息,但是我猜想无论出于何种原因,你的viewDidLoad方法被多次调用,导致许多重复的计时器不断调用你的{{1 }和repeatRequest方法。

您可能想了解为什么onTimer可能被多次调用。还要看看here。您应该假设允许多次调用viewDidLoad

(要检查此问题,只需将viewDidLoad添加到NSLog(@"viewdidload");方法中,然后查看调用此频率的频率。)

因此,你应该做的是将viewDidLoad个实例存储为ivars(假设它们分别被称为NSTimertimer1),然后检查它们是否已经存在{ {1}}被称为:

timer2

答案 1 :(得分:0)

听起来您可能正在创建这些计时器的多个实例,可能是因为您的视图实际上已多次加载。创建计时器以验证时,您可能会输出日志或断点。

您应该保留对在viewDidLoad中创建的计时器的引用,以便您可以在viewDidUnload中正确地使它们无效。