1

假设我的 iPhone 应用程序中有两个 NSTimers: timer1timer2timer1每秒调用function1 30 次,timer2 每秒调用function2 30 次。假设这两个函数正在读取和更新相同的整数变量。这里有任何“多线程”问题吗?如果不是,iPhone OS 如何处理这两个功能的执行(通常)?

4

2 回答 2

5

任何 iPhone 应用程序(以及一些其他平台)的核心都是运行循环。每个线程可能都有一个run loop,主线程上的run loop是为你设置好的。当有事情要做时,比如触发 NSTimer 或绘制视图层次结构,运行循环会执行这些任务。当无事可做时,运行循环处于空闲状态,允许其他事情处理。

运行循环内部是线程感知的,因此运行循环所处理的任何事情都必须是。所有 NSTimer 回调和视图渲染都发生在串行或线性流中的单个线程上。

具体细节可以查阅NSRunLoop或者CFRunLoop。

于 2010-05-09T22:39:38.317 回答
2

据我所知,NSTimers 使用运行循环来实现它们的“异步”。如果计时器是使用 scheduleTimerWith... 方法创建的,那么它将被安排在默认(主)运行循环上,并将在主线程上执行。

我认为不会为计时器创建任何新线程(除非您明确地这样做,并将计时器分配给该运行循环)。

所以最后,我相信你的两个计时器不应该相互冲突。

但是,文档指出计时器并不代表实时。计时器将在预定时间或之后触发,但不能保证在预定时间准确触发。因此,如果触发的方法的执行时间比计时器的时间间隔长,您可能不会看到该方法被调用的频率与您预期的一样多。

话虽如此,你问这个问题有什么特别的原因吗?您是否看到使用此设置的不良行为?

于 2010-05-09T22:39:32.453 回答