iOS CPU概要: 为什么这个线程会占用99.9%的CPU?

10
有时当我加载表视图时,什么也不做,只是让表视图显示,我会等几秒钟,然后我的 CPU 使用率就会飙升。如何找到原因?

我猜测它在一个“无限”循环中。在这种情况下,可能是因为存储已经混乱了,但也可能是因为您某种方式描述了一个现在正在被导航的循环数据结构。 - Hot Licks
我认为我们需要更多细节(iOS版本等)。 正如@HotLicks所说,这可能是一个无限循环。 - Idris
反转调用树并尝试查找有问题的方法/函数。听起来像是一个UIKit/绘图问题。 - duci9y
2个回答

15
为什么这个线程会占用99.9%的CPU?
我不知道。但是以下是一些想法:
1.负责的库是UIKit。因此,似乎某些用户界面代码已经崩溃了。
2.一个名为FreeContextStack的函数正在运行很长时间。
3.pthread_once和pthread_getspecific需要相当长的时间。这些函数很快,所以它们必须经常运行。
4.它们是GetContextStack和PopContext的一部分。
在你的代码中,似乎有某种“上下文”堆栈被推入,但没有弹出。我会寻找没有配对结束符的UIGraphicsPushContext或UIGraphicsBeginImageContext的出现。
但是我可能完全错了,这些函数不是图形上下文代码的一部分。

1
例如,情境A可能是情境B的子情境,而情境B又是情境A的子情境... - Hot Licks
没错!我漏掉了 UIGraphicsEndImageContext()CGImageRelease(imageRef) - Rose Perrone
我也遇到了同样的问题。谢谢聪明的网友! - voidref
我遇到了这个问题,但是在我的项目中我们没有任何地方没有结束图像上下文。有人有其他可能的解决方案吗?这也是随机的。它不可重现,并且偶尔会发生在各种随机视图上... - Gregg

1

你可能没有结束你的 UIGraphicsBeginImageContext

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


Rudi,你出现在低质量帖子队列中,因为你的回答看起来像是“我有同样的问题”;所以我稍微改了一下措辞 - 希望你没关系。 - J. Chomel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接