我正在尝试设置一个线程,该线程在新数据可用之前一直处于空闲状态。在 Objective-C 中最好的方法是什么?到目前为止,我尝试制作一个简单的运行循环
while(YES) {
if(isDataAvailable) {
//process data
}
}
但是这对性能有很大的影响,我的 FPS 从 40 下降到 20 并且界面变得不可用(即使实际数据处理大约每秒发生一次并且它对 CPU 来说不是很强烈。我试图在最后添加[NSThread sleepForTimeInterval:0.01]
,但是这样我丢失了数据包('process data'指的是一些流相关操作,队列和取消队列数据包),但是FPS恢复正常.
我是 Objective-C 的新手,我在想也许有更好的方法来做到这一点?我也查看了 NSRunLoop,但没能让它作为运行循环工作 :),只附加了一个计时器,它的功能不超过我的 [NSThread sleepForTimeInterval:0.01]
东西。
非常感谢任何帮助:D
最佳答案
如果你需要保持辅助线程存活,你肯定要使用真正的runloop: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1
基本上,只需创建并启动您的线程,设置一个自动释放池,然后运行您的 runloop 一段时间。当时间到期时,您检查是否应该退出您的线程,或者再次进入运行循环。
不过,正如 Marcelo 指出的那样,有更多现代方法可以实现并发(GCD 和异步分派(dispatch)是其中的几个例子),因此也可以研究其他形式的并发。
关于objective-c - iOS 中的空闲线程方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5607618/