Threadsafe UITableView

Ada*_*nst 4 cocoa multithreading cocoa-touch

我正在使用UITableView来显示数组中的一些数据.其他线程可以随时更改此数组.(我相信无论数组是可变的,还是只是完全替换,都没有区别.)对数组本身的访问是线程安全的.

在tableview方面确保线程安全的正确方法是什么?我担心,例如,我可能会在调用cellForRowAtIndexPath之前将数组更改为更短,从而导致NSRangeException.

我是不是该...

  1. 强制只在主线程上更改数组?(看起来很难看.)
  2. 维护一个阴影数组并通过KVO观察在主线程上更新它?
  3. ??? 必须有一个更好的解决方案......

Ben*_*ieb 6

根据您的描述,您确实有两个不同的数据集:

  • 实际数据,因为它存在于您的模型中
  • 显示给用户的数据

因此,实际上,你已经拥有了一个"阴影"数组(虚拟阴影,它可能会将这个比喻拉得太远).我想说你最好的办法是将这种安排形式化,并保留一个只在主线程中修改的"显示"数组.在其中,您可以拥有来自"真实"数组的对象; 因为它们只是指针,所以你不会放弃太多的记忆.

线程是邪恶的.