使用UITableViewController的应用程序变得非常反应迟钝

时间:2013-01-02 14:26:49

标签: iphone objective-c ios

我注意到我的整个应用程序在使用一段时间后变得非常反应迟钝。我打开仪器并决定做一些测试,主要是关于内存和CPU使用率。我将我的应用程序与Twitter应用程序进行了比较,因为它使用了UITableView和tableView中的图像,就像我的应用程序一样。我对乐器完全陌生,所以不得不使用我对iPhone如何工作来弄清楚所有内容的基本理解。

似乎我的内存使用情况很好,因为两个应用程序都非常相似。我的应用程序经过大量使用后,在此阶段非常滞后:Real Memory:55.63,Virtual:152.03。 Twitter:Real:58.42,虚拟:192.89。 Twitter应用程序,尽管使用更多的内存仍然真的响应(我不会说超级响应,仍然有一些跳跃的时刻)。关闭后,我转向了CPU。

现在这就变得奇怪了。 Twitter应用程序使用非常少量的CPU(即使它比我的应用程序稍微强一点)。当什么都没发生时,CPU使用率下降到~0%。它跳了几次,这恰好与应用程序变得有点滞后时相吻合。然而,我的应用程序是一个巨大的CPU猪!当什么都没发生时,我的应用程序使用100%的已用CPU,大约80%-100%。换句话说,当读取Activity Monitor Instrument上的条形图时,UITableView处于空闲状态时系统负载不会减少,这就是Twitter应用程序正在执行的操作。

因此我决定这就是应用程序变得反应迟钝/迟钝的原因。问题是,我不知道如何解决这个问题。

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

即使我切换到UIViewController,高负荷仍然存在。 UIViewController是起始视图控制器,当应用程序首次启动时,它的负载为0%并且无限期保持为0%。加载仅在UITableViewController加载时跳起,然后如上所述保持不变。因此,这个巨大的CPU使用率必须来自UITableViewController

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

感谢您的帮助,
问候,
麦克

2 个答案:

答案 0 :(得分:2)

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

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

这就是穷人的性能调试方法。先进的方法是使用仪器。

答案 1 :(得分:0)

  

我做了大量的异步网络请求。然而,这并没有解释为什么CPU使用率保持不变,因为请求通常在一秒钟内完成,而JSON在很快就下载并解析了。

通常他们使用相反的方法:像Twitter这样做得好的应用程序使用服务器在更新内容时向应用程序发送通知。

查看this article