36

有没有人知道我的应用程序是否冻结我必须检查什么?我的意思是,我可以在 iPad 屏幕上看到该应用程序,但没有按钮响应。当我单击按钮时,我尝试过调试代码,但我还没有看到任何东西。我正在阅读有关 Instruments 工具的信息;具体如何使用它们?

有谁能够帮助我?我只需要解释如何使用这些工具。

4

6 回答 6

107

听起来您以某种方式阻止了主线程。要调试,请在调试器中运行应用程序,当应用程序冻结时,点击 Xcode 底部日志区域上方的暂停按钮。然后在左侧,您将能够准确地看到每个线程在做什么,并且您可以看到它卡在哪里。

暂停按钮

可能是主线程上的长循环或同步死锁。

于 2012-04-17T17:57:39.033 回答
3

最佳答案是正确的。您可以使用“暂停”选项进行调试。阻塞主线程的最常见方法是调用dispatch_sync您调度的同一线程。有时您从dispatch_once.

于 2016-12-21T08:19:14.917 回答
3

除了暂停和跟踪堆栈跟踪之外,我认为还有一件事要做,就是检查代码是否有任何导致应用程序冻结的循环。

我最近遇到了类似的问题,但堆栈跟踪并没有太大帮助,我发现在调用reloadData()内部 layoutsubviews 方法时我有一个永恒的循环,这导致了没有错误的冻结,也没有仪器的帮助。

于 2017-01-09T00:56:41.057 回答
1

我的项目中有类似的情况,原因是另一个开发人员添加了setNeedsLayout()内部方法layoutSubviews(),这会导致无限循环并冻结应用程序。

于 2019-03-04T20:53:54.467 回答
0

同样的问题发生在我的 ios 13.4 上,然后我尝试了上述解决方案,但没有解决,所以我尝试在编译时有一个带有中断约束的元素。因此,在解决约束后,我尝试解决了我的问题。

于 2020-04-22T05:50:28.433 回答
0

我建议检查你的尺寸,特别是在集合视图中,如果它们不合适,它们会冻结你的应用程序并检查你的约束

于 2022-03-03T10:16:26.763 回答