Ios 应用程序遇到CPU使用率高达100%的问题

Ios 应用程序遇到CPU使用率高达100%的问题,ios,grand-central-dispatch,cfrunloop,Ios,Grand Central Dispatch,Cfrunloop,我的应用程序与CFRUNLOOP_纠缠在一起,它正在调用一个函数来调用回调函数。 在我的应用程序中,我调用了一个异步的C函数。我在执行过程中显示等待消息。当此函数终止时,它调用一个委托来关闭等待的消息,同时显示一个AlertView 我使用gcd显示alertview dispatch_async(dispatch_queue_create("com.myapp.service.waitingmessage", nil), ^{ dispatch_async(dispat

我的应用程序与CFRUNLOOP_纠缠在一起,它正在调用一个函数来调用回调函数。 在我的应用程序中,我调用了一个异步的C函数。我在执行过程中显示等待消息。当此函数终止时,它调用一个委托来关闭等待的消息,同时显示一个AlertView

我使用gcd显示alertview

dispatch_async(dispatch_queue_create("com.myapp.service.waitingmessage", nil), ^{
            dispatch_async(dispatch_get_main_queue(), ^{
            UIAlertView *anAlert = ...
            [anAlert show];
             });
        });
下面是应用程序卡住时调试器XCode的屏幕截图。 我还看到,我的应用程序的CPU使用率高达100%,这可能就是应用程序被系统挂起的原因

使用dispatch_sync代替dispatch_asyncdispatch_get_main_队列,^{


您不能从后台线程更新UI。

但是在我的dispatch\u async中,我添加了要在主队列中执行的代码。我认为这样更新UI是正确的。您不应该在主队列上执行太多的async。最佳做法是创建一个后台队列,将其与dispatch\u async一起使用,并使用dispatch\u get\u main\u队列r您的dispatch\u sync调用。我没有完全遵循您在后台尝试运行的内容。您正在创建一个后台队列,并立即用主循环块填充它。您可以删除第一行和最后一行,并获得相同的效果。另外请注意,UIAlertView已弃用,您将得到任何类型的块处理正在初始化UIAlertController。我已修复该问题。这是由另一段代码引起的。PS:UIAlertView仅在iOS 8.0中过时