NSTimer选择器问题

时间:2011-09-21 11:47:08

标签: iphone selector nstimer

问候!!

我有以下功能:

-(void) doMainBrick
{
    NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:0.1
                                                       target:self
                                                     selector:@selector(dropBrick:)
                                                     userInfo:nil
                                                    repeats:YES];
}

-(void) dropBrick:(NSTimer*) timex 
{
    //deal something 
   [self SwitchBrick];
}

我想知道是否有可能,如果dropBrick函数的行数大于scheduledTimerWithTimeInterval(在上面的示例中,它是0.1), 再次发出另一个电话dropBrick(每0.1秒开火一次,重复:重复:是)? 或者无论如何,NSTimer将等待最后一次dropBrick结束然后解雇?

2 个答案:

答案 0 :(得分:1)

NSTimers计划在RunLoop上。

这意味着在RunLoop的每次迭代中,系统都会执行以下操作:

  • 检查是否有一些计时器已经过了他们的开火时间。如果是,请触发相关方法。
  • 检查是否有其他输入源(如在RunLoop上安排的套接字等)有输入数据要继续,如果这样处理它们。
  • 检查是否有待处理的事件,例如触摸事件,并处理它们(触发相关的操作)
  • 执行绘图
  • 再次迭代

结果:

  • 除了定时器本身触发的调用之外,NSTimer并不关心你是否自己手动调用dropBrick
  • 如果计时器调用的方法超过指定的timeInterval,则在RunLoop迭代结束时,将立即再次触发该方法,因为下一次调用的触发日期已经过去。

答案 1 :(得分:0)

我能想到的一个想法是......

设置Repeat:NO并让dropBrick递归调用自身。添加一些睡眠来控制递归调用的频率。