iOS CPU配置文件:为什么这个线程会占用99.9%的CPU?

iOS CPU配置文件:为什么这个线程会占用99.9%的CPU?,ios,multithreading,xcode-instruments,Ios,Multithreading,Xcode Instruments,有时,当我加载一个表视图时,除了让表视图显示外,我没有故意执行任何活动,我会等待几秒钟,然后CPU使用率突然上升。我怎样才能找到原因 为什么这个线程会占用99.9%的CPU 我不知道。但这里有一些想法: 负责的库是UIKit。所以看起来有些用户界面代码被破坏了 名为FreeContextStack的函数正在运行很长时间 pthread\u一次和pthread\u getspecific需要相当长的时间。这些函数速度很快,因此它们必须经常运行 它们是GetContextStack和PopCont

有时,当我加载一个表视图时,除了让表视图显示外,我没有故意执行任何活动,我会等待几秒钟,然后CPU使用率突然上升。我怎样才能找到原因

为什么这个线程会占用99.9%的CPU

我不知道。但这里有一些想法:

  • 负责的库是
    UIKit
    。所以看起来有些用户界面代码被破坏了
  • 名为
    FreeContextStack
    的函数正在运行很长时间
  • pthread\u一次
    pthread\u getspecific
    需要相当长的时间。这些函数速度很快,因此它们必须经常运行
  • 它们是
    GetContextStack
    PopContext
  • 在您的代码中似乎有某种“上下文”堆栈被推送,但没有弹出。我将查找出现的
    UIGraphicsPushContext
    UIGraphicsBeginImageContext
    ,但没有它们的结束对应项


    但是我可能已经完全关闭了,这些函数不是图形上下文代码的一部分。

    可能您没有结束您的
    UIGraphicsBeginImageContext


    我通过在使用后添加
    UIGraphicsEndImageContext
    解决了同样的问题。

    我猜它是在一个“无限”循环中。在这种情况下,可能是因为存储被破坏了,尽管可能是因为您描述了一个正在导航的循环数据结构。我认为我们需要更多的细节(iOS版本等等)。正如@HotLicks所说,这很可能是一个无限循环。反转调用树并尝试查找有问题的方法/函数。听起来像是UIKit/绘图问题。例如,可能是上下文a是上下文B的子级,而上下文B是上下文a的子级……完全正确!我丢失了
    UIGraphicsEndImageContext()
    CGImageRelease(imageRef)
    。我看到了同样的情况。我也有同样的问题。谢谢你,聪明人!我有这个问题,但在我的项目中没有一个地方不结束图像上下文。有人有其他可能的解决办法吗?它也是随机的。它是不可复制的,偶尔会出现在各种随机视图上……(鲁迪,你出现在低质量的帖子队列中,因为你的答案看起来像“我有同样的问题”;所以我稍微改变了措辞-希望你同意)