UITableView重用机制原理及数据源同步处理

重用机制

代码
cell = [tableView dequeueReusableCellWithIdentifier:identifier];

机制

  • 系统会创建当前屏幕cell数+1个cell
  • 对UITableView向上滑动时,当第一个单元格完全滑出屏幕后,此时就会被加入到重用池中,接下来继续向上滑动时,当一个新的单元格出现时,就会根据指定的identifier标示符,从重用池中取出一个可重用的cell

作用

  • 避免大量创建实例对象,减少内存消耗,从而提高滑动流畅性

数据源同步问题

场景描述

  • UITableView有一个数据源datasource,用户对datasource进行了删除某一个元素的操作,与此同时向服务器请求数据,请求后的数据会对datasource进行赋值操作,此时就产生了数据源同步的问题

分析

  • 用户删除操作是在主线程,请求数据并赋值操作是在子线程,俩个线程会同时对datasource进行操作,会产生数据源同步问题

解决方式

  • 并发访问、数据拷贝的方式:当用户进行删除操作后,将删除的元素进行拷贝记录,当请求数据时,用拷贝的元素与请求数据进行对比,然后进行同步的删除操作,最后再对datasource进行赋值,这样就解决了数据源同步问题(数据源数据较大时,会有拷贝带来的性能损耗)
  • 串行访问的方式:(请求数据时间过长时,会对删除操作有延时)
  //串行队列
  dispatch_async(serial,^{
        //子线程网络请求,数据解析
  })

 //串行队列
diapatch_sync(serial,^{
    //主线程中删除datasource的某一个元素,因为是被加入到了串行队列,因此删除操作需要等待网络请求和数据解析结束后才能进行
})

dispatch_sync(main,^{
    //更新ui
})

你可能感兴趣的:(UITableView重用机制原理及数据源同步处理)