我正在使用Swift 2.0中的iOS应用程序并且遇到麻烦使UITableView加载速度快,现在加载需要1-2秒。
我有什么。
我有一个带自定义单元格的UITableView。每个自定义单元格都有UIScrollView和PageControl,用于水平滚动。
在UIScrollView的每个页面上还有一个单独的xib。这个xib包含两个UIViewPickers的视图。
工作原理
在“tablewView:cellForRowAtIndexPath”中,我正在调用一个函数,该函数使用xib文件实例化子视图并用数据填充它。然后将它添加到scrollView并配置分页。
什么慢
如果我将3-20个页面添加到3个单元格中它已经很慢(1-3秒)。
我已经尝试将数据填充到后台线程中的子视图中,然后在主线程中将这些子视图添加到单元格中。它使整个tableView显得很快但是你需要等待多长时间才能看到每个单元格中的实际数据。
我查看了仪器,在我看来,我的所有数据计算都非常快,但添加那些带有uipickers的子视图是最慢的部分。
我还试图只添加第一个subView,然后在用户开始在单元格上水平滚动时添加所有其余的。它的速度提高了10倍,但滞后仍然很明显,逻辑更复杂(在滚动拖动上添加新的子视图并不是非常简单)。
关于我应该在哪里寻找以及如何使整个概念快速运作的任何更好的建议?我确信它可以很快就需要改进逻辑。
答案 0 :(得分:1)
我认为"只添加第一个subView,然后在用户开始在单元格上水平滚动时添加所有其余的。"很好。我建议这个:加载第一个subView。然后加载其他睡眠时间。类似的东西:
// load others,
notMainthread{
for (...subviews){
mainThread{
loadSubView();
}
sleep(0.01);
}
}
我不太了解,所以我写了一个伪代码。 链接应用我为加载太多子视图所做的工作:https://itunes.apple.com/vn/app/liveradio/id998787831
一些代码:
// running on not main thread
for (int i=0; i<[listCT count]; i++) {
...
dispatch_async( dispatch_get_main_queue(), ^{
emptyImage.frame = CGRectMake(0, yEndLast, cWidthTop, yStart-yEndLast);
[emptyImage setContentMode:UIViewContentModeCenter];
[contentView addSubview:emptyImage];
});
[NSThread sleepForTimeInterval:0.004];
}