我的应用程序冻结但没有出现错误

问题描述 投票:30回答:4

有没有人知道我有什么要检查我的应用是否会冻结?我的意思是,我可以在iPad屏幕上看到该应用,但没有按钮响应。我点击按钮时尝试调试代码,但我还没有看到任何东西。我正在阅读有关仪器工具的内容;具体如何使用它们?

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

ios debugging xcode-instruments
4个回答
86
投票

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

pause button

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


1
投票

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

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


0
投票

最佳答案是正确的。您可以使用“暂停”选项对其进行调试。阻止主线程的最常见方法是在您调度的同一线程上调用dispatch_sync。有时你从dispatch_once调用相同的代码。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.