iOS经验总结

iOS 13基于 Diffable 实现局部刷新

2021-02-26  本文已影响0人  冷武橘

在 iOS 13 中 Apple 为 UITableView 和 UICollectionView 引入了 DiffableDataSource,让开发者可以更简单高效的实现 UITableView、UICollectionView 的局部数据刷新。新的刷新的方法为 apply,通过使用 apply 方法无需计算变更的 indexPaths,也无需调用 reload,即可安全地在主线程或后台线程更新 UI, 仅需简单的将需要变更后的数据通过 NSDiffableDataSourceSnapshot 计算出来。

一、基本使用

#pragma mark - 1、创建一个 A diffable data 关联_tableview,
    UITableViewDiffableDataSource *dffableSource = [[UITableViewDiffableDataSource alloc]initWithTableView:_tableview cellProvider:^UITableViewCell * _Nullable(UITableView * _Nonnull tableView , NSIndexPath * _Nonnull indexPath, id _Nonnull res) {

#pragma mark - 2、配置并返回cell
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
        cell.textLabel.text = [NSString stringWithFormat:@"测试-%@",res];
        return cell;
    }];
 self.dffableSource = dffableSource;
#pragma mark - 3、配置数据
       NSDiffableDataSourceSnapshot *snapshot = dffableSource.snapshot;

 #pragma mark - 3.1、确定有多少组
       [snapshot appendSectionsWithIdentifiers:@[@"1"]];   //SectionIdentifierType不可以重复⚠️

       [snapshot appendSectionsWithIdentifiers:@[@"2"]];  //根据需求添加更多的Section

#pragma mark - 3.2、确定每组的行数
       [snapshot appendItemsWithIdentifiers:@[@"1",@"2",@"3"] intoSectionWithIdentifier:@"1"];

       [snapshot appendItemsWithIdentifiers:@[@"4",@"5"] intoSectionWithIdentifier:@"2"];
    
#pragma mark - 3.3、刷新表格
       [dffableSource applySnapshot:snapshot animatingDifferences:NO  completion:^{
      
       }];

注意:NSDiffableDataSourceSnapshot的实例对象,直接通过dffableSource.snapshot;

   NSDiffableDataSourceSnapshot *snapshot1 = dffableSource.snapshot;
       NSDiffableDataSourceSnapshot *snapshot2= dffableSource.snapshot;
       NSDiffableDataSourceSnapshot *snapshot3= dffableSource.snapshot;
       NSLog(@"snapshot1:%p",snapshot1);
       NSLog(@"snapshot2:%p",snapshot2);
       NSLog(@"snapshot3:%p",snapshot3);

控制台打印:snapshot1:0x600001778440; snapshot2:0x600001778450;snapshot3:0x600001778460
可知:每次dffableSource.snapshot得到的是不同的对象,这里在开发时就要注意了。

二、详细介绍和使用

参考:https://www.jianshu.com/p/66e3694363b3

上一篇下一篇

猜你喜欢

热点阅读