使用Xcode 7中的dispatch async,CPU使用率是否超过100%是正常的

时间:2016-09-07 18:58:05

标签: ios swift grand-central-dispatch infinite-loop blockingqueue

我是swift 2中的初学者,我正在尝试创建程序块,同时只显示一个进度微调器,直到某些操作完成,我在一个按钮中创建了代码片段,其中的操作是“内部触摸”,我的问题是,在调试时,一旦我点击我的按钮并保持高电平直到标志改变其值,Xcode 7 CPU使用率跳升到190%,CPU使用率是否正常跳转?这也是一个好习惯吗?以下片段或shud我在我的无限循环中使用睡眠或其他机制?

let queue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
            dispatch_async(self.queue2) { () -> Void in
            while(flag == true)
            {
                //wait until flag sets to false from previous func
            }
            self.dispatch_main({ 

                 //continue after the flag became false
})

3 个答案:

答案 0 :(得分:1)

这是一个非常经济的完成处理程序

if( jQuery(this).position().left < halfScreenWidth )

或附加调度到主队列以更新UI

func test(completion:() -> ())
{
  // do hard work
  completion()
}

let queue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(queue2) {
  test() {
    print("completed")
  }
}

答案 1 :(得分:0)

这是完全错误的方法,因为您正在使用while循环等待。你应该使用Completion Handler来实现这种目标。

  

完成处理程序是回调,允许客户端在框架方法或函数完成其任务时执行某些操作。通常,客户端使用完成处理程序来释放状态或更新用户界面。几种框架方法允许您将完成处理程序实现为块(而不是代理方法或通知处理程序)。

有关详细信息,请参阅Apple documentation

答案 2 :(得分:0)

我想你有一种管理这些“一些操作完成”的类。

完成操作后,您可以通过完成处理程序或委派进行通信。同时,您可以禁用UI的用户交互,直到这些操作结束。

如果您提供有关后台操作的更多信息,我可以添加一些代码片段。