我正在使用UITableView来显示数组中的一些数据.其他线程可以随时更改此数组.(我相信无论数组是可变的,还是只是完全替换,都没有区别.)对数组本身的访问是线程安全的.
在tableview方面确保线程安全的正确方法是什么?我担心,例如,我可能会在调用cellForRowAtIndexPath之前将数组更改为更短,从而导致NSRangeException.
我是不是该...
强制只在主线程上更改数组?(看起来很难看.)
维护一个阴影数组并通过KVO观察在主线程上更新它?
??? 必须有一个更好的解决方案......
Ben Gottlieb.. 6
根据您的描述,您确实有两个不同的数据集:
实际数据,因为它存在于您的模型中
显示给用户的数据
因此,实际上,你已经拥有了一个"阴影"数组(虚拟阴影,它可能会将这个比喻拉得太远).我想说你最好的办法是将这种安排形式化,并保留一个只在主线程中修改的"显示"数组.在其中,您可以拥有来自"真实"数组的对象; 因为它们只是指针,所以你不会放弃太多的记忆.
线程是邪恶的.
根据您的描述,您确实有两个不同的数据集:
实际数据,因为它存在于您的模型中
显示给用户的数据
因此,实际上,你已经拥有了一个"阴影"数组(虚拟阴影,它可能会将这个比喻拉得太远).我想说你最好的办法是将这种安排形式化,并保留一个只在主线程中修改的"显示"数组.在其中,您可以拥有来自"真实"数组的对象; 因为它们只是指针,所以你不会放弃太多的记忆.
线程是邪恶的.