【发布时间】:2015-03-11 18:53:34
【问题描述】:
我需要在一个非常复杂的表格视图中包含几种不同的单元格类型。我在那些具有不同重用标识符的不同单元类中注册了 10 个 xib。问题是,当我第一次(从上到下)滚动表格视图时,我可以看到它有点滞后。但是,在我滚动到底部之后,再滚动回顶部和底部再次运行顺利。问题似乎出在 dequeueReusableCellWithIdentifier: 如果目前没有所需类型的可重用单元格,则在滚动时似乎无法足够快地加载不同的 xib 文件。这就是为什么第一次滚动会滞后,但是当每种类型的可重用单元都加载了足够多时,它就会开始平滑滚动。
有没有办法为 UITableView 预加载可重用的单元格。因此,例如,我可以加载每种 xib 类型 3 次(因此当调用 dequeueReusableCellWithIdentifier 时,tableview 将在内存中加载 30 个可重复使用的单元格(10 种单元格类型中的每个单元格 3 个))?稍后我需要在应用商店上发布应用,因此不允许使用任何私有 api。或者,在这种情况下,您还有其他可能的解决方案来提高性能吗?
【问题讨论】:
-
您在模拟器上看到滞后还是仅在设备上看到滞后(什么类型的设备/iOS 版本)?如果 dequeueReusableCellWithIdentifier 确实有问题,也可以通过 Xcode Instruments 进行检查。
-
在模拟器和设备(iphone 5 ios 8)上都滞后,但正如我所说的,仅在第一次从上到下滚动时。完全滚动后,它开始平滑滚动。是的,我检查了仪器,看起来 dequeueReusableCellWithIdentifier 是问题所在。
-
您应该在 UITableView 实例中通过 -[dequeueReusableCellWithIdentifier:(NSString *)identifier] 注册您的单元格 xib。您可能需要覆盖自定义单元类中的 -[prepareForReuse] 。所以单元格实例将被重用。减少单元实例数将提高您的速度。
标签: ios performance uitableview reuseidentifier