iOS 数据源同步问题的解决方案及其利弊

为什么要解决数据源同步的问题,因为tableView这些使用率极高的列表视图一般都会需要处理数据源同步问题。例如tableView列表显示内容的时候,有些cell上显示的广告,这个时候我们怎么在删除广告的同时刷新tableView的内容?

首先想到的是在主线程进行操作,接着在子线程进行网络请求,数据解析等操作,最终在主线程更新UI。此时显示的UI视图任然是没有变化的,因为子线程并没有记录主线程的删除操作,拿到的数据还是没有删除的,所以此时不能解决数据源同步的问题。

以下是两种解决数据源同步问题的方案:

1. 并发访问,数据拷贝
iOS 数据源同步问题的解决方案及其利弊_第1张图片

通过上图我们可以了解当主线程做了一次删除操作的时候,我们需要将这个操作记录下来.并且当子线程需要操作的时候需要操作一次主线程的删除操作,这样才能保住数据的正确性.

2.串行访问
iOS 数据源同步问题的解决方案及其利弊_第2张图片

通过上图我们可以知道:串行访问的原理是通过GCD开辟一条串行队列.把数据操作的任务放到串行队列上去操作.这样可以同步主线程和子线程对数据源的操作.

总结利弊

这两种方法虽然都能够解决数据源同步的问题,但是也存在一些问题。
例如并发访问,数据拷贝的方法:如果需要删除的数据很多的话,在子线程中会不断的拷贝数据,记录删除操作,会消耗大量的内存空间。
而串行访问的话:就是主线程在进行删除等操作的时候,需要等待子线程的耗时操作完成之后再刷新UI,在界面显示的就是数据没有及时加载出来,用户体验度会有所降低。

demo git码云地址

  • 并发访问,数据拷贝
  • 串行访问

你可能感兴趣的:(iOS 数据源同步问题的解决方案及其利弊)