美文网首页
iOS- UITableView数据源同步

iOS- UITableView数据源同步

作者: 时米高的人生笔记 | 来源:发表于2020-06-16 19:33 被阅读0次
  • 问题
    多线程下,修改tableview的数据源,数据同步问题的解决方案?

  • 应用场景:
    在某些新闻类app中,当有用户做一些删除操作(比如关掉了一条广告),然后同时又有数据的后向刷新(loadMoreData)
    删除操作是在主线程,loadMoreData是在子线程,这就涉及到了多线程对数据的访问中,怎么保证数据源同步问题。

  • 解决方案

  1. 并发访问,数据拷贝

我们来看一幅时序图

多线程并发访问数据源

主线程对数据源1 进行了删除操作,得到数据源2;
子线程对数据源1 进行数据解析预排版等操作,得到数据源3;
最后主线程reload UI时,从子线程拿到的是数据源3,而数据源3里是含有被删除的哪一行数据的;
这就造成了被删除的数据又被刷出来的bug;
怎么解决呢?

数据拷贝的解决方案

在主线程对数据源1进行删除操作得到数据源2时,记录下删除操作;
子线程完成网络请求数据解析后,同步下删除操作,这样得到的数据源和2相同;
最后,主线程reload UI 时,数据源也是和2是一样的。

2. 串行访问
还有一种串行访问的解决方案:不管是子线程还是主线程,对tableView的数据源操作都提交到串行队列上,来避免数据源错乱问题。

串行访问数据源流程

子线程把 对数据源1的网络请求/数据解析等操作提交到 串行队列;
串行队列对新增数据进行预排版等操作;
主线程删除数据后,把删除操作异步提交到串行队列,waiting 串行队列完成同步数据操作(这里要注意是 【异步提交】);
最后等串行队列完成数据删除的同步,得到数据源2,返回给主线程reload UI。

这两种方案各有利弊:

  • 并发访问,数据拷贝的解决方案,如果数据量较大,大量的数据拷贝会增加内存开销;
  • 串行访问的方案,如果子线程任务耗时太久,会造成主线程延时;

在开发过程中,可以根据项目的实际应用场景来决定采用哪种方案。

相关文章

  • iOS- UI事件传递& 响应

    UI视图相关重要知识点 传送带: iOS- UITableView重用机制 iOS- UITableView数据源...

  • iOS- UITableView数据源同步

    问题多线程下,修改tableview的数据源,数据同步问题的解决方案? 应用场景:在某些新闻类app中,当有用户做...

  • UI主要技术

    UITableView重用机制 数据源同步问题例如:ui显示数据源请求来的数据,删除某行后,子线程请求数据又同步到...

  • 02-UI视图

    UI视图内容 UITableView重用机制数据源的多线程操作(数据源同步问题) 事件传递&视图响应 视图显示原理...

  • iOS面试题

    一.UI相关 1.UITableView相关 (1).重用机制 (2).数据源同步问题(多线程下修改数据源) 2....

  • UITableView数据源同步

    UITableView多线程操作会导致数据源不同步问题,比如删除操作的同时loadMore操作返回 并发访问 数据...

  • UI视图相关

    UI视图相关 UITableView 相关重用机制数据源同步(新闻类app, 数据删除)并发访问串行访问 时间传递...

  • UI视图篇

    UITableView相关 重用机制 字母索引条 数据源同步问题 并发访问、数据拷贝 串行访问 事件传递&视图响应...

  • UI相关知识

    一、UITableView相关 1.1、重用机制 代码层 重用示意图 1.2、数据源同步 解决方案 并发访问、数据...

  • 01UI视图总结

    先调用 //后调用 1. UI视图 1.1 UITableView 1.cell重用机制2.数据源同步, 并发访问...

网友评论

      本文标题:iOS- UITableView数据源同步

      本文链接:https://www.haomeiwen.com/subject/mfarxktx.html