IOS面试题(TableView) ----- 数据源同步

问题: 请说一下tableview的数据源同步问题, 都有哪些解决方法

或者问: 多线程对tableview同一共享数据源操作 都有哪些解决方法

我们看下一个例子, 方便理解理解这个问题

例子

针对tableview, 要同步进行操作, 数据变更怎么处理 ?

下面方法我都拿这个场景举例:

tableview 初始数据为[A, B, C], 主线程做个删除操作, 删除B。子线程做个请求加载, 加载[D, E, F]。最终目的以返回 [A, C, D, E, F] 刷新UI

方法一: 并发访问
方法一例子
  • 子线程拷贝一份数据1:[A, B, C], 进行数据请求
  • 主线程删除B, 变为 [A, C] 刷新UI, 此时子线程还在数据请求, 暂未返回应答
  • 子线程数据请求完成, 变成数据3 [A, B, C, D, E, F], 返回
  • 以数据3 [A, B, C, D, E, F] 刷新UI

很明显是错误的

稍微改动一下

并发访问解决方法

在删除操作之后, 我们做一个记录操作, 而在子线程数据返回之后, 我们同步操作, 已达到数据正常返回的目的

缺点: 记录操作会做额外的开销

方法二: 串行访问

串行访问是大家写业务最常用的方法

串行访问解决方法

由于是串行访问, 那么肯定有一串行队列

  • 子线程中进行网络请求/数据解析结果方法串行队列, 进行新增数据预排版等操作, 此时主线程删除操作等待
  • 串行队列处理完子线程数据之后, 同步主线程删除操作
  • 刷新UI

缺点: 如果子线程操作耗时情况下, 主线程的操作要一直延时等待

总结:

2种方法实际都各有利弊, 针对于不同场景使用不同方法

你可能感兴趣的:(IOS面试题(TableView) ----- 数据源同步)