我们假设存在一个名为myTable的UITableView
。假设发生以下事件序列 -
表已完全填充。
数据源已更新(在本例中为sqlite3 db,但并不重要),NSNotifcation恰好表示有新数据,主线程接收通知然后调用[myTable reloadData ]
调用myTable的UITableViewDataSource numberOfSectionsInTableView
。假设只有1节。
调用myTable的UITableViewDataSource tableView:numberOfRowsInSection:
。
根据数据源中的行数调用几个tableView:cellForRowAtIndexPath:
。
我的问题与cellForRowAtIndexPath的可中断性有关。
问题 -
如果调用“reloadData”并且调用了cellForRowAtIndexPath并且另一个reloadData进入,那么在调用numberOfSectionsInTableView和numberofRowsInSection之后,cellForRowAtIndexPath是否会在中途停止并重新启动?
或者新的reloadData是否会排队,这样所有的cellForRowAtIndexPaths都会在调用numberOfSectionsInTableView和numberOfRowsInSection之前完成?
我看起来并没有成功地在文档或网络中找到这个问题的答案。我担心如果在cellForRowAtIndexPaths“正在运行”时更新数据存储,则numberOfSectionsInTableView可以更改,这可能导致cellForRowAtIndexPath请求现在超出范围的单元格的数据。
非常感谢任何帮助。
答案 0 :(得分:2)
由于你只应该在主线程上调用reloadData
,因为到reloadData
的调用完成后,所有可见的单元格都已经加载了,没有问题需要担心。第一次完成后,将对reloadData
进行第二次调用。
答案 1 :(得分:1)
假设在同一(主)线程上调用它们(在后台线程上进行异步处理),我认为在调用cellForRowAtIndexPath
时reloadData
可能不在cellForRowAtIndexPath
的中间位置在{{1}}似乎毫无意义。)