iphone - 带有 UITableViewController 的应用程序变得非常无响应

标签 iphone objective-c ios

我注意到我的整个应用程序在使用一段时间后变得 react 迟钝。我打开仪器并决定做一些测试,主要是关于内存和 CPU 使用率。我将我的应用程序与 Twitter 应用程序进行了比较,因为后者同时使用 UITableView 和 tableView 中的图像,这与我的应用程序非常相似。我对仪器完全陌生,因此必须使用我对 iPhone 工作原理的非常基本的了解来弄清楚所有指示的内容。

我的内存使用情况似乎很好,因为这两个应用程序惊人地相似。我的应用程序经过大量使用后,在这个阶段非常滞后:真实内存:55.63,虚拟:152.03。推特:真实:58.42,虚拟:192.89。 Twitter 应用程序,尽管使用了更多内存,但仍然非常灵敏(我不会说 super 灵敏,仍然有一些紧张的时刻)。关闭后,我转向 CPU。

现在这就是它变得奇怪的地方。 Twitter 应用程序使用非常少量的 CPU(即使它比我的应用程序稍微密集一些)。当什么都没有发生时,CPU 使用率下降到 ~0%。它跳了几次,这与应用程序变得有点迟钝的时间相吻合。然而,我的应用程序是一个巨大的 CPU pig !当什么都没有发生时,我的应用程序使用 100% 的已用 CPU,大约是 80%-100%。换句话说,当读取 Activity Monitor Instrument 上的条形图时,系统负载不会在 UITableView 空闲时减少,而这正是 Twitter 应用程序正在做的。

因此,我认为这就是该应用变得无响应/滞后的原因。问题是,我不知道如何解决这个问题。

这是我能想到的:
- 我做了一大堆异步网络请求。然而,这并不能解释为什么 CPU 使用率一直居高不下,因为请求通常会在一秒钟内完成,并且很快就会下载和解析 JSON。
- 我在每个单独的网络请求完成后重新加载 TableView。但是,如上所述,这是在下载最后一个 JSON 的同时完成的,因此没有理由导致 CPU 使用率飙升。
- 在我的单元格配置中完成大量计算。不过和前两者一样,也没有太多解释。

即使我切换到 UIViewController,高负载仍然存在。 UIViewController 是起始 View Controller ,当应用程序首次启动时,它的负载为 0% 并无限期地保持在 0%。只有当 UITableViewController 加载时,加载才会跳起来,然后保持如上所述。因此,这个巨大的 CPU 使用率必须来自 UITableViewController

有人有什么想法吗?对不起,大量的文字墙。如果您需要我发布任何代码,请询问,我会做。

谢谢你的帮助,
问候,
迈克

最佳答案

在调试器中运行您的应用程序,并在运行缓慢时随机停止它。然后检查所有不同的线程在做什么。您可能很快就会发现一些您意想不到的事情,并且可能是罪魁祸首。

只需在调试器中按下暂停按钮,然后展开所有线程以显示调用堆栈。如果一个线程的调用栈只显示iOS的函数和方法,可以忽略。但是,如果它显示了您应用程序的某些方法,那么您想单击这些方法并进行调查:为什么该方法当前正在运行?为什么它卡在这条特定的线上?

这是一种穷人的性能调试方法。高级方法是使用 Instruments。

关于iphone - 带有 UITableViewController 的应用程序变得非常无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14123771/

相关文章:

ios - 为什么我的应用程序在从 NSUserDefaults 加载数组时崩溃?

iphone - 从设备中检索序列号

ios - 如何在 objective-c 中使用缓存内存概念

objective-c - 设置 uinavigationitem 的后退按钮不起作用

ios - 无需 Sidekick 的 Nativescript 代码签名

ios - 是否可以仅让应用程序的某些部分支持 iPad View ?

ios - 字典比较数组

objective-c - 模态窗口未关闭

ios - 错误域=EKCADErrorDomain 代码=1013 "The operation couldn’ t 完成。 (EKCADErrorDomain 错误 1013。)”

ios - UITableView trailingSwipeActionsConfigurationForRowAt 图片和标题