目标C,一次一种方法?

时间:2012-01-04 18:31:51

标签: iphone objective-c xcode cocos2d-iphone

如果我在cocos2d中创建一个简单的Xcode项目,我总是想知道在以下情况下会发生什么:

方法A每0.01秒安排一次

方法B每1秒安排一次

现在假设方法B是一个很大的方法,需要花一点时间来计算。是否会被方法A中断?

换句话说,一个方法总会在另一个方法开始之前完成吗?

我没有创建线程或任何东西。

3 个答案:

答案 0 :(得分:5)

通常,当您在UI应用程序的UI线程中调度内容时,一旦启动特定操作,它就不会被中断(错误除外)。这不仅适用于iOS,也适用于大多数UI平台。

系统可能会中断UI线程以处理硬件中断(或者,例如,由于接收到的单元信号引起的中断),但这些中断对应用程序来说(大部分)是“透明的”。

但你永远不会被自己的行动打断。

答案 1 :(得分:2)

这假设您将使用NSTimer来安排您的方法,并且两种方法都将在同一个runloop上进行处理(即每个方法不使用单独的线程,这通常在您想要安排两个时使用独立运行的方法。

此引用直接来自苹果网站上的NSTimer class reference overview section

  

如果在长时间标注期间或在运行循环处于不监视计时器的模式下发生计时器的触发时间,则计时器会执行   在下次运行循环检查计时器之前不会触发。   因此,计时器可能发射的实际时间可能是   在预定的开火时间后很长一段时间。

也就是说,方法A的轮询机制(例如NSTimer)在方法B完成之前不会触发,假设它们在同一个运行循环中。方法A不会因为sé而中断方法B,而是依赖于它完成任务。

如果您想要将方法A和方法B放在单独的线程上以便它们独立工作,您可以从这里开始:Grand Central Dispatch

答案 2 :(得分:1)

如果您不使用线程,则保证您的方法按顺序执行,而不会中断。