Tag: 数据源

iOS 10 —使用预提取API滚动UICollectionViewDataSourcePrefetching

以下讨论的所有内容均来自此WWDC视频 。 这个长达35分钟的视频包含有关UICollectionView增强功能的所有详细信息,并解释了为什么添加此Pre-Fetch API,现有的滚动体验,帧掉落等问题是什么? 所以现在,让我们进入理论, 随着开发的任何移动应用程序用户规模的增长,该应用程序能够承受各种网络呼叫,各种设备和屏幕尺寸变得越来越重要。 理想情况下,每个应用程序都需要交付即时的内容交付,不丢帧(或不浪费网络数据)。 为了实现这一目标,我想通过“后台预取”(已经通过在各种应用程序中使用不同的机制来解决这一问题!)是打破所有其他依赖关系并平稳运行/滚动的方式。 用“ Background pre-fetching”(背景预先提取)一词,这是不言而喻的,任何移动应用程序都应该在后台提取足够的数据,并准备好将它们预先显示在屏幕上,从而可以流畅地观看内容。 在分析任何应用程序时,滚动时通常会由于以下原因而导致内容下降或滞后: 1.网络可用性 网络连接将会频繁下降,因此移动应用必须提出一种不同的实时获取内容的策略。 如果我们以相同的次数定位许多用户,则移动应用程序必须处理网络带宽速度。 2.切换连接类型 移动应用必须观察其用户sim或wifi或两者之间的切换的不同使用模式。 根据用户已在其移动应用程序中连接的连接,内容将显示得更快或更慢。 3.没有互联网连接 如果移动应用程序完全失去了互联网连接怎么办? 是否向用户显示提示说没有互联网连接(或),一个带有加载/刷新图标的占位符单元足够,以便在互联网连接重新打开时重新加载,是否很好? 从任何移动角度来看,它将是以下两个选项之一: 1. 脱机数据处理 ,以从应用程序的数据库中获取并显示先前获取的内容。 2. 缓存机制 ,我们在其中缓存内容并显示它们。 现在,如果没有先决条件,所有条件都得到满足,但移动应用程序仍然没有流畅的滚动体验,该怎么办? 在iOS 10上,Apple引入了“ 数据预取 ”概念及其相关的API后,在UICollectionView和UITableView中都可以在后台线程中预取数据以体验流畅的滚动体验,它确实有效! 操作系统负责在后台获取其他数据。 在直接进入API方法之前,让我们看一下iOS 9中UICollectionView的生命周期: 1. collectionView(_:cellForItemAt 🙂 -单元格将进入带有内容的可见区域。 2. collectionView(_:willDisplay:forItemAt 🙂 -单元格进入带有内容的可见区域。 3. collectionView(didEndDisplaying:forItemAt 🙂 -单元格在可见字段之外。 现在,iOS 10中的UICollectionView的生命周期: 它与iOS 9相似,但是按照Apple的解释,操作系统更早地调用collectionView(_:cellForItemAt 🙂 ,这意味着,即使在需要显示单元格之前,也可以完成所有繁重的工作。 另一个是,使用iOS […]