Mar*_*ski 4 iphone lazy-loading uiscrollview
我有一个水平滚动UIScrollview启用分页.每个页面代表一个数据Feed.每个数据馈送消耗相当大的内存,包括UITableView中显示的文本和图像.由于用户可以拥有无限量的数据馈送,因此我需要延迟加载它们以防止最大限度地减少内存使用量.我的想法是在任何给定点保持内存中最多5个数据源,并释放超出该范围的任何内容.我最初的看法是将页面保留在内存中的视口中,并将页面保留在其中的任意一侧.这样,当用户滚动时,下一个连续页面将始终在内存中并将快速显示.
这是我的问题:我们还需要支持这样一种场景:用户可以跳到特定的数据源,可能是向右或向左的10个或更多页面,这会将我的整个延迟加载方案抛出窗口.
可能有更好的策略来支持这种情况吗?
是的,你可以做的是创建一个外部滚动视图,其中包含类似于tableview的单个单元格.在这方面,单元格有一个内容视图,你可以放置你的数据,让我们假设你知道如何做到这一点,因为你似乎这样做.
一旦你掌握了这个架构,就会变得相当清楚:你可以知道单元格的宽度和屏幕的大小,一些简单的数学可以告诉你屏幕上有多少,你可以添加一个左侧或右侧,以便您在用户滚动时预加载一些数据.
这将说明,让您能够在内存中,最多5个Feed,如果3个可见,在滚动视图的内容视图的开头或结尾,4个Feed,无论您是否有十亿个Feed.
其中一个关键部分是细胞再利用.你维持一对NSSet,一个用于回收细胞,一个用于可见细胞.将已离开屏幕的项目添加到回收的单元格中,在设置单元格时从回收的单元格中将项目出列,以节省额外的内存分配,这可能很昂贵.请记住,使用这种策略,UITableView对于细胞再利用而言,您仍然对于相同的警告是主观的.
我正在插入我在这里写的一些软件,所以请原谅我,但我这样做是为了说明如果你实施我在这里讨论的内容,我正在谈论的内容,这里可供你细读.
最后一点说明.为了支持跳过单元格,只需简单的数学计算就可以调整滚动视图中的点.对此的操作可以通过手势完成,但现在我们正在谈论一个平移手势识别器,具有一些特定于您的应用程序的特定属性,作为示例.或者你可以使用按钮,如果你真的必须.只需确保您知道如何计算单元格的偏移量,然后滚动到该点.你会没事的.
| 归档时间: |
|
| 查看次数: |
2133 次 |
| 最近记录: |