Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 带有UIPageControl性能问题的自定义UIScrollview_Objective C_Ios - Fatal编程技术网

Objective c 带有UIPageControl性能问题的自定义UIScrollview

Objective c 带有UIPageControl性能问题的自定义UIScrollview,objective-c,ios,Objective C,Ios,我有一个UIPageControl,它有24页。每个页面都有一个UITableView。用户可以按屏幕顶部的按钮刷新所有24页的数据 在所有页面上调用reloadData会导致3秒的延迟,但是数据会被刷新,并且它们可以在UIPageControl中滚动并查看新数据。在当前页面上调用reloadData速度很快,但只会更新相关页面。当用户转到下一页时,数据是旧的/错误的 我的解决方案是实现一个系统,在用户滚动页面之前,我调用页面上的reloadData,一次调用一个,并跟踪哪些页面是最新的,哪些页

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

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

我的解决方案是实现一个系统,在用户滚动页面之前,我调用页面上的reloadData,一次调用一个,并跟踪哪些页面是最新的,哪些页面不是

在页面数量相对较多的UIPageControl情况下,这是正确的方法吗?还是我误用了UIPageControl,使用了不正确的方式刷新页面,或者其他什么

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


谢谢。

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

 UIControlEventValueChanged 

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

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

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

在Apple UIPageControl示例中,每次UIScrollView委托调用其scrollViewDidScroll:方法时,他们都会加载当前页、上一页和下一页处理,当然,对于第一页和最后一页,上一页/下一页可能不存在。也许您可以在这个方法中调用[tableView reloadData]

如果您发现每次加载页面时都必须加载全部24个页面,那么您可以立即调用[tableView reloadData],然后遍历其他页面,一次重新加载一个页面的数据,等待一个页面完成后再加载下一个页面

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

谢谢你的回答并确认我的想法。我还没有在没有确认这是正确的方式以及我当前的解决方案(即加载所有内容)不是最佳方式的情况下实现延迟加载。谢谢你深思熟虑的回答。再次感谢你的回答。像mbm30075一样,您是正确的,我感谢您的回复。