我注意到我的整个应用程序在使用一段时间后变得非常无响应。我打开了仪器并决定做一些测试,主要是关于内存和 CPU 使用情况。我将我的应用程序与 Twitter 应用程序进行了比较,因为它UITableView
在 tableView 中同时使用 a 和图像,就像我的应用程序一样。我对仪器完全陌生,所以必须使用我对 iPhone 工作原理的非常基本的了解来弄清楚所有内容。
看来我的内存使用情况很好,因为这两个应用程序惊人地相似。我的应用经过大量使用,在这个阶段非常滞后:真实内存:55.63,虚拟:152.03。推特:真实: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
.
有没有人有任何想法?对不起,大量的文字墙。如果您需要我发布任何代码,请询问,我会做的。
感谢您的帮助,
问候,
迈克