问题场景: 删除tableview的数据源的一条数据时又触发了加载更多, 这样的话删除和加载更多会同时访问和修改数据源, 这时如何处理?
1 并发访问, 数据拷贝
假设删除数据在主线程, 加载更多在子线程A;
- 在删除数据之前做数据copy到加载更多的A线程中去. 并记录需要删除的数据;
- 主线程删除需要删除的数据并刷新;
- A线程中, 完成加载更多后,删除需要删除的数据然后转到主线程刷新UI;
缺点:需要copy, 内存开销大;
2 串行访问
假设删除数据在主线程, 加载更多在子线程A, 串行同步队列B;
- 将加载更多拿到的数据和需要删除的数据都放到队列B中;
- 串行队列中,同步执行; 加载更多和删除都完成后转到主线程刷新UI;
缺点:串行队列同步执行, 如果删除或者加载更多都很耗时的话整个过程会比较慢;
网友评论