如果我的应用程序冻结,是否有任何机构知道我必须检查什么?我的意思是,我可以在iPad屏幕上看到该应用,但没有按钮响应。我点击按钮时尝试调试代码,但我还没有看到任何东西。我正在阅读有关仪器工具的内容;具体如何使用它们?
任何人都可以帮助我吗?我只需要解释如何使用这些工具。
答案 0 :(得分:82)
听起来你以某种方式阻止了主线程。要调试,在调试器中运行应用程序,当应用程序冻结时,点击Xcode底部日志区域上方的暂停按钮。然后在左侧,您将能够准确地看到每个线程正在做什么,并且您可以看到它被卡住的位置。
可能是主线程上的长循环或同步死锁。
答案 1 :(得分:1)
除了暂停和跟踪堆栈跟踪之外,我认为另外要做的事情是检查代码是否存在导致应用冻结的任何循环。
我最近遇到了类似的问题,但堆栈跟踪没有多大帮助,我发现在layoutsubviews方法中调用reloadData()
时我有一个永恒的循环,这导致冻结没有错误,也没有仪器的帮助。
答案 2 :(得分:0)
最佳答案是正确的。您可以使用" Pause"进行调试。选项。阻止主线程的最常见方法是在您调度的同一线程上调用dispatch_sync
。有时您从dispatch_once
调用相同的代码。
答案 3 :(得分:0)
我的项目中有类似的情况,原因是另一位开发人员在方法console.log("statusCode:", res.statusCode);
var data = "";
res.on("data", (d) => {
data += d;
});
res.on("end", x => {
// data is now ready
});
中添加了setNeedsLayout()
,这造成了无限循环并冻结了应用程序。
答案 4 :(得分:0)
同一问题发生在ios 13.4上,然后我尝试了上述解决方案,但没有解决,因此我尝试在编译时使用一个具有break约束的元素。因此,在解决约束之后,我尝试解决了我的问题。