iOS中的空闲线程方法

时间:2011-04-09 20:17:45

标签: objective-c ios

我正在尝试设置一个空闲的线程,直到新数据可用。 Objective-C中最好的方法是什么?直到现在我试图制作一个简单的运行循环

while(YES) {
   if(isDataAvailable) {
      //process data
   }
}

然而,这会对性能产生巨大影响,我的FPS从40下降到20并且界面变得无法使用(即使实际的数据处理在一秒左右发生一次,而且对CPU来说也不是很强烈。我试过最后添加[NSThread sleepForTimeInterval:0.01],但这样我丢失了数据包('流程数据'指的是一些与流相关的操作,队列和异常数据包),但FPS恢复正常。

我是Objective-C的新手,我想也许有更好的方法可以做到这一点?我还看了一下NSRunLoop,但没有设法使它作为一个运行循环:),只附加一个计时器,它不会超过我的[NSThread sleepForTimeInterval:0.01]事物。

任何帮助都非常感谢:D

1 个答案:

答案 0 :(得分:1)

如果你需要保持seconary线程活着,你肯定想要使用真正的runloop: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1

基本上,只需创建并启动线程,设置自动释放池,然后运行runloop一段时间。当时间到期时,您检查是否应退出线程,或再次进入runloop。

正如Marcelo指出的那样,有更多现代方法可以实现并发(GCD和异步调度只是一些例子),所以也许可以调查其他形式的并发。