对于大型数据集,是否建议在 cellForRowAtIndexPath 上调用 Web 服务?
Is it advisable to call Web Services on cellForRowAtIndexPath for large datasets?
如果数据集太大,我想在 table 视图上显示数据。最好的方法应该是什么?
第一种方法-
我在 cellForRowAtIndexPath 中调用 API。这将在我每次滚动时发出请求,这意味着一次又一次地点击该服务。也许我也可以缓存数据,但我仍然认为这不是最好的方法。
第二种方法-
首先,将所有数据保存在本地,然后显示。这将意味着占用更多的内部存储空间。
哪种方法更好或是否有更好的方法可用?
你会采取什么方法取决于你的API是否支持分页!如果 API 不支持分页,那么您别无选择,只能一次检索所有内容并将其显示在 tableView 中。
如果你的 API 支持分页,那么你可以在 ViewDidLoad
中调用加载第一页,然后执行 scrollViewDidScroll
委托来检查用户何时滚动到底部table/collectionView 并触发网络服务获取下一页响应。这将一直持续到服务器返回空数组为止。
这是一个简单的 scrollViewDidScroll 覆盖,您可以使用它来确定用户是否到达 tableView/collectionView
的末尾
extension ViewController : UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let bottomEdge = scrollView.contentSize.height + scrollView.contentInset.bottom - scrollView.bounds.height
if scrollView.contentOffset.y >= bottomEdge {
//make a webservice call now
}
}
}
创建太多连接不是一个好主意。
您应该获得所有这些并在一个页面中显示几个项目。
但是由于数据太多,你有两个选择。将它们结合起来作为第三种选择更好。
不显示任何数据,实现搜索栏,请求带有搜索文本的数据。现在您根据搜索文本请求了数据的子集。
请求数据子集(例如前 20 个)并实现 load more
按钮(您也可以使用 scrollview 的委托代替按钮)或 pagination.
如果响应有图片链接,您应该下载cellForRowAtIndexpath 中的图片。如果您之前开始下载它们,用户将等待太多。
如果数据集太大,我想在 table 视图上显示数据。最好的方法应该是什么?
第一种方法- 我在 cellForRowAtIndexPath 中调用 API。这将在我每次滚动时发出请求,这意味着一次又一次地点击该服务。也许我也可以缓存数据,但我仍然认为这不是最好的方法。
第二种方法- 首先,将所有数据保存在本地,然后显示。这将意味着占用更多的内部存储空间。
哪种方法更好或是否有更好的方法可用?
你会采取什么方法取决于你的API是否支持分页!如果 API 不支持分页,那么您别无选择,只能一次检索所有内容并将其显示在 tableView 中。
如果你的 API 支持分页,那么你可以在 ViewDidLoad
中调用加载第一页,然后执行 scrollViewDidScroll
委托来检查用户何时滚动到底部table/collectionView 并触发网络服务获取下一页响应。这将一直持续到服务器返回空数组为止。
这是一个简单的 scrollViewDidScroll 覆盖,您可以使用它来确定用户是否到达 tableView/collectionView
的末尾extension ViewController : UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let bottomEdge = scrollView.contentSize.height + scrollView.contentInset.bottom - scrollView.bounds.height
if scrollView.contentOffset.y >= bottomEdge {
//make a webservice call now
}
}
}
创建太多连接不是一个好主意。
您应该获得所有这些并在一个页面中显示几个项目。
但是由于数据太多,你有两个选择。将它们结合起来作为第三种选择更好。
不显示任何数据,实现搜索栏,请求带有搜索文本的数据。现在您根据搜索文本请求了数据的子集。
请求数据子集(例如前 20 个)并实现
load more
按钮(您也可以使用 scrollview 的委托代替按钮)或pagination.
如果响应有图片链接,您应该下载cellForRowAtIndexpath 中的图片。如果您之前开始下载它们,用户将等待太多。