2 iOS中的高性能Feed UI框架

点击后,它将在单元格顶部显示另一个视图。 即使您向下滚动并返回,它也会停留在单元格上。 听起来很正常很容易,对吧?

通常,这里倾向于发生的是在单元格中检测到动作,并且单元格直接在单元格上添加视图,因为它仅更新视图,而不是用户状态等。当单元格被重用或当单元格被重新使用时,这将是一个巨大的问题。用户回到此单元格。

为什么选择ComponentKit

ComponentKit的一大功能是视图是不可变的。 由于它是不可变的,因此数据存储和视图之间的通信将更加简单。 仅当数据存储发生任何更新时,视图才会更新。 话虽如此,这是从数据存储到视图进行通信的一种方式。

性能

ComponentKit还使我们在保持简单性的同时具有良好的性能,因为它们仅更新视图层次结构中的更新视图组件。 这将使我们更容易更新,插入和删除组件。

缺点

  • 用Objective-C ++编写,表示.mm文件。 没有雨燕。

与Swift互操作没有简单的方法,因为Swift无法桥接到C ++。 Few.swift或Katana等实验项目正在探索如何将React的概念应用到Swift中。

来自 http://componentkit.org/docs/uses.html

  • 由于语言的原因,额外的括号。 如果您是Objective-C爱好者,那么这将不是问题。
  • 您仍然需要根据需要更新UICollectionView

IGListKit

另一个不错的选择是Instagram团队构建的IGListKit。

Instagram / IGListKit
IGListKit –数据驱动的UICollectionView框架,用于构建快速灵活的列表。 github.com

Ryan Nystrom详细讨论了如何构建框架。

大规模重构–汲取的经验教训重写Instagram的Feed
当Instagram团队从头开始重写他们的iOS提要时,他们学到了比预期更多的信息…… realm.io

总览

IGListKit替换了UICollectionView。 它为集合视图接收数据数组。 当它接收到一个新的数据数组时,它将检查差异并自动处理具有O(n)运行时复杂度的批处理更新。

该框架是为从服务器获取数据并在集合视图上显示它们的服务而设计的。

它是用Objective-C编写的,但是您也可以将它们与Swift一起使用。

他们也有很好的示例项目,在仓库中有很多示例。

Raywenderlich也有关于IGListKit的精彩文章。

IGListKit教程:更好的UICollectionViews
每个应用程序都以相同的方式启动:几个屏幕,一些按钮,可能还有一两个列表。 但是随着时间的流逝和应用程序的发展…… www.raywenderlich.com

摘要

我研究了Facebook和Instagram用于时间轴供稿UI的框架,它们都解决了扩展时面临的特定问题。 例如,Instagram团队拥有大量的控制器和大量的提要对象,以支持各种功能。 简而言之,出于只显示从服务器获取的项目列表的目的,我决定使用IGListKit。 但是,这当然取决于您要解决的问题。

Interesting Posts