美文网首页
IOS面试题(TableView) ----- 数据源同步

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

作者: ShawnAlex | 来源:发表于2022-03-28 19:27 被阅读0次

    问题: 请说一下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) ----- 数据源同步

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