数据源同步问题

当我们开启子线程处理数据源的时候,主线程的操作并没有记录在子线程中。这样就会导致子线程处理完数据返回主线程刷新UI后数据错乱。

例子:比如说tableView中显示新闻数据和广告,子线程进行网络请求,数据解析等操作的同时。主线程中删除了广告,并更新UI。然后子线程处理完数据,最终也在主线程中更新UI,子线程没有记录主线程的删除操作,导致数据源没有同步的问题。
解决办法如下

1、并发访问,数据拷贝

数据源同步问题_第1张图片
通过上图我们可以了解当主线程做了一次删除操作的时候,我们需要将这个操作记录下来,并且当子线程需要操作的时候进行一次主线程的删除操作,这样才能保证数据的正确性。

2、串行访问

数据源同步问题_第2张图片
串行访问的原理是通过GCD开辟一条串行队列,把数据操作的任务放到串行队列上面操作,这样可以同步主线程和子线程对数据源的操作。

3、利弊

以上两种方式都能解决数据源同步问题,但是这两种解决方案也是存在一定问题的。
首先并发访问数据拷贝,顾名思义是要对操作机型记录并拷贝到子线程中,这样需要开辟内存空间,对内存消耗较大。
其次串行访问,当线程有耗时操作时,就会导致对数据源的增删改查操作有延时。

你可能感兴趣的:(面试问题,iOS,数据源同步)