在iOS和Cocoa Touch上,touchesBegan和timerFired会有竞争状态吗?
问题描述:
说,如果timerFired
(定时器处理程序)通过使用NSTimer
或CADisplayLink
的早期设置调用,并且touchesBegan
也在用户触摸屏幕时调用,那么在两个处理程序内部的代码中是否会发生任何竞争条件(定时器处理函数和触摸事件处理程序)?在iOS和Cocoa Touch上,touchesBegan和timerFired会有竞争状态吗?
答
如果一个定时器处理程序和touchesBegan
都在主线程上运行,那么它们中的代码就不能混合(它们在同一个线程中)。这是正常情况。
可能有竞争条件,计时器可能会在touchesBegan
之前或之后运行,但如果它们在同一个线程上,则它们不能同时运行。如果将计时器连接到另一个线程的runloop(这是非常不寻常的事情),它们只会在不同的线程上。
+1正确的答案。 – Till 2012-04-27 01:06:04