objective-c - iOS 中的空闲线程方法

标签 objective-c ios

我正在尝试设置一个线程,该线程在新数据可用之前一直处于空闲状态。在 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/

相关文章:

ios - 无法正确获取 UISwipeGestureRecognizer 方向

ios - 如何将 UITableView 设置为分组样式

iphone - 无法设置 UILabel 属性

ios - 单元格或标题 View 高度的 UITableViewAutomaticDimension 导致 UITableView insertRowsAtIndexPaths() 崩溃

ios - 检查类型为 "NeXT/Apple typedstream"版本 4 (NSArchiver) 的文件

ios - MKMapView 与带有自定义图标的 MKAnnotation 一起崩溃

ios - 如何以编程方式计算 UIImagePickerController 工具栏的高度?

ios - 从 Swift 3.0 转换为 Swift 2.3

ios - 如何用模拟和预定义的答案替换异步调用?

iphone - "Image view"的位置和大小不明确