4

假设存在一个UITableView名为 myTable。假设发生了以下事件序列——

  1. 表已完全填充。

  2. 数据源被更新(本例是一个sqlite3 db,但并不重要),一个NSNotifcation 恰好表明有新数据,主线程收到通知然后调用[myTable reloadData]。

  3. myTable 的 UITableViewDataSourcenumberOfSectionsInTableView被调用。假设只有 1 个部分。

  4. myTable 的 UITableViewDataSourcetableView:numberOfRowsInSection:被调用。

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

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

问题——

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

还是将新的 reloadData 排队,这样所有的 cellForRowAtIndexPaths 都将在 numberOfSectionsInTableView 和 numberOfRowsInSection 被调用之前完成?

我已经看过并且未能在文档或网络中找到这个问题的答案。我担心如果在 cellForRowAtIndexPaths “运行”时更新数据存储,numberOfSectionsInTableView 可能会发生变化,这可能导致 cellForRowAtIndexPath 请求现在超出范围的单元格的数据。

任何帮助将不胜感激。

4

2 回答 2

2

由于您应该只reloadData在主线程上调用,并且在调用reloadData完成时,所有可见单元格都已加载,因此无需担心任何问题。第二次调用reloadData将在第一次调用完成后进行。

于 2013-09-11T18:10:00.877 回答
1

假设它们都在同一个(主)线程上调用(在后台线程上进行异步处理似乎毫无意义),我认为不可能处于调用时间的中间cellForRowAtIndexPathreloadDatacellForRowAtIndexPath

于 2013-09-11T18:09:30.637 回答