2011-09-21 78 views
0

问候!!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结束然后解雇?

回答

1

NSTimers计划在RunLoop上。

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

  • 检查是否有安排一些定时器针对他们的火时间已过。如果是这样,则启动相关的方法。
  • 检查是否有其他输入源(如RunLoop等调度的套接字)有输入数据继续进行,如果是这样的话。
  • 检查是否有事件之前,像触摸事件,并处理它们(火灾相关联的动作)
  • 执行绘图
  • 迭代再次

结果:

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

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

设置重复:NO,让dropBrick递归调用本身。增加一些睡眠来控制递归调用的频率。