0

我有一个有 24 页的 UIPageControl。每个页面都有一个 UITableView。用户可以按下屏幕顶部的按钮来刷新数据(所有 24 页)。

在所有页面上调用 reloadData 会导致 3 秒延迟,但数据会刷新,并且它们可以滚动 UIPageControl 并查看新数据。在当前页面上调用 reloadData 速度很快,但只会更新相关页面。当用户转到下一页时,数据是旧的/错误的。

我的“修复”是实现一个系统,在用户滚动到页面之前,我在页面上调用 reloadData,一次一个,并跟踪哪些页面是新鲜的,哪些不是。

这是在具有相对大量页面的 UIPageControl 情况下的正确方法,还是我滥用 UIPageControl、使用不正确的方式刷新页面或其他方式。

我非常感谢您对解决此性能问题的建议。

谢谢。

4

2 回答 2

0

不要同时加载 24 个页面。由于用户一次只能看到一个页面,因此一次加载所有页面只是浪费资源。您应该检测用户所在的当前页面并仅重新加载该页面。如果您依赖 UIPageControl 来切换页面,请让您的代理监听事件

 UIControlEventValueChanged 

并加载您的下一页。如果您使用的是 UIScrollView,您还可以使用其委托方法来检测更改并重新加载相应的页面。

于 2012-04-30T01:49:51.337 回答
0

我不确定您所描述的是否是最佳实践,但我将假设您知道自己在做什么并且已经找到了可行的解决方案(不是每个人都会假设的)。

根据您的评论/问题,我不太确定,但是您似乎已经在尝试仅以惰性方式动态加载数据。如果是这样的话,我可能没什么可补充的,但这里有一些想法:

  1. 在 Apple UIPageControl 示例中,每次 UIScrollView 委托调用其scrollViewDidScroll:方法时,它们都会加载当前页面、上一页和下一页(当然,处理第一页和最后一页的情况,其中上一页/下一页可能不存在)。也许您可以在这种方法中调用[tableView reloadData].

  2. 如果您发现每次页面加载时都必须加载所有 24 个页面,也许您可​​以[tableView reloadData]立即调用然后遍历其他页面,一次重新加载它们的数据,等待一个页面完成后再加载下一个页面。

数字 1 似​​乎是一种更快地准备好数据的优雅方式。
2 号对我来说就像一个非常笨拙的黑客,所以我真的想看看 1 号是否可行。

于 2012-04-30T01:51:37.687 回答