UITableView reloadData和cellForRowAtIndexPath - 可中断?

时间:2013-09-11 18:01:01

标签: ios uitableview

我们假设存在一个名为myTable的UITableView。假设发生以下事件序列 -

  1. 表已完全填充。

  2. 数据源已更新(在本例中为sqlite3 db,但并不重要),NSNotifcation恰好表示有新数据,主线程接收通知然后调用[myTable reloadData ]

  3. 调用myTable的UITableViewDataSource numberOfSectionsInTableView。假设只有1节。

  4. 调用myTable的UITableViewDataSource tableView:numberOfRowsInSection:

  5. 根据数据源中的行数调用几个tableView:cellForRowAtIndexPath:

  6. 我的问题与cellForRowAtIndexPath的可中断性有关。

    问题 -

    如果调用“reloadData”并且调用了cellForRowAtIndexPath并且另一个reloadData进入,那么在调用numberOfSectionsInTableView和numberofRowsInSection之后,cellForRowAtIndexPath是否会在中途停止并重新启动?

    或者新的reloadData是否会排队,这样所有的cellForRowAtIndexPaths都会在调用numberOfSectionsInTableView和numberOfRowsInSection之前完成?

    我看起来并没有成功地在文档或网络中找到这个问题的答案。我担心如果在cellForRowAtIndexPaths“正在运行”时更新数据存储,则numberOfSectionsInTableView可以更改,这可能导致cellForRowAtIndexPath请求现在超出范围的单元格的数据。

    非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

由于你只应该在主线程上调用reloadData,因为到reloadData的调用完成后,所有可见的单元格都已经加载了,没有问题需要担心。第一次完成后,将对reloadData进行第二次调用。

答案 1 :(得分:1)

假设在同一(主)线程上调用它们(在后台线程上进行异步处理),我认为在调用cellForRowAtIndexPathreloadData可能不在cellForRowAtIndexPath的中间位置在{{1}}似乎毫无意义。)