【发布时间】:2014-03-03 08:50:12
【问题描述】:
我的问题是加载缓慢,滚动速度很快。
我必须显示一个有 10 列的表格:
+-----+------+------+------+------+------+------+------+------+-------+
| Pos | Name | Col3 | Col4 | Col5 | Col6 | Col7 | Col8 | Col9 | Col10 |
+-----+------+------+------+------+------+------+------+------+-------+
| 1 | Foo | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | Bar | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 | Baz | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+-----+------+------+------+------+------+------+------+------+-------+
忽略表头(我不显示它)我使用UITableView 和子类UITableViewCell 来表示数据。
我的自定义 UITableViewCell 有 10 个 UILabel 子视图,全部添加到它的 contentView。每列一个。
我只是在UITableView 的cellForRowAtIndexPath 方法中为每个UILabel 子视图设置文本值。
在任何时候,屏幕上大约有 14 行。滚动速度超级快。我的reuseIdentifier 运行良好。
但是,表的初始加载速度明显很慢。比我使用 UITableView 的其他屏幕慢很多,但它们的列要少得多。
我的单元格都设置为opaque(我知道这是默认值)。
我错过了什么技巧吗?浏览量是不是太多了?我应该采取另一种方法吗?还是我做得很好,我应该在我的代码中寻找另一个影响加载时间的问题吗?
更新:
我已经运行 instruments 并且大部分时间(500 毫秒 74.5%)是:
CA::Layer::layout_and_display_if_needed(CA::Transaction*)
更新:
有些人认为我的数据是瓶颈。
我正在使用NSFetchedResultsController。
没有计算。每行的数据直接从相应的实体加载,数据按原样显示。我不是遍历对象图来从任何其他关系或类似的东西中获取数据。
打开 CoreData SQLDebug 后,我可以看到 20 行的总提取执行时间为 0.0014 秒。我的批量大小设置为 20(比屏幕上可见的略多)以帮助滚动。
滚动速度非常快,所以我认为这里的数据不是问题。
【问题讨论】:
-
提供一些代码 (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
-
您是否尝试过使用 Instruments 对其进行分析?
-
您是从一个简单的数组、CoreData 还是什么获取 cellForRowAtIndexPath 方法中这些标签的内容?我认为你的延迟是因为你如何获得你的价值观。
-
发布有关如何加载数据的代码。这很可能是速度缓慢的原因。
-
我添加了一些关于数据加载的信息和一些运行仪器的信息。
标签: ios iphone objective-c uitableview