ToB企服应用市场:ToB评测及商务社交产业平台

标题: iOS开发- reloadData方法先容 [打印本页]

作者: 尚未崩坏    时间: 2024-7-25 18:22
标题: iOS开发- reloadData方法先容
在实际开发中,经常需要对tableView或者collectionView执行更新数据源的操作,reloadData是一个常见的方法。这是 UITableView 和 UICollectionView 提供的一个方法,用于重新加载视图的所有可见行(或项)。
当调用 reloadData 方法时,UITableView 或 UICollectionView 会放弃当前显示的所有Cell并重新请求其数据源对象以获取新的Cell。这个过程涉及以下步调:
reloadData 方法通常在以下情况下使用:
使用 reloadData 方法的缺点是它会重新加载整个列表或网格,这可能不是性能最优的选择,特别是当只有数据的一小部分发生变革时。在这种情况下,更细粒度的更新方法(如 insertRowsAtIndexPaths:withRowAnimation:、deleteRowsAtIndexPaths:withRowAnimation:、reloadRowsAtIndexPaths:withRowAnimation: 对于 UITableView,以及对应的 UICollectionView 方法)可能是更好的选择,因为它们答应只更新改变的部分,而不是整个视图。
  1. @weakify(self);
  2.     dispatch_async(dispatch_get_main_queue(), ^{
  3.         @strongify(self);
  4.         if (!self) {
  5.             return;
  6.         }
  7.         //需要实现的代码
  8.     });
复制代码
但是不一定就会在reloadData完成后执行,因为在这里使用 dispatch_async 将一个 block 异步地派发到主队列。但由于 reloadData 也会在主队列上异步执行,这两个操作是独立的,而且都被异步地参加到主队列中,执行顺序取决于它们被参加队列的时间和队列的状态。
假如目标是确保 某一个任务 在 collectionView 完全加载数据后执行,我现在想到的方法是使用使用 dispatch_after:
  1. @weakify(self);
  2. dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(100 * NSEC_PER_MSEC));
  3. dispatch_after(delayTime, dispatch_get_main_queue(), ^{
  4.     @strongify(self);
  5.     if (!self) {
  6.         return;
  7.     }
  8.     //执行任务代码
  9. });
复制代码
当然具体的时间要根据实际情况安排,我这是100ms,根本上reloadData已经完成了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4