我读到 [_tableView reloadData]
向主队列发送消息以更新和显示 TableView 中的数据。基于此,我想讨论以下案例。假设另一个方法在 [_tableView reloadData]
之前向主队列发送一条消息,那么第二条消息会在 [_tableView reloadData]
之前得到处理吗?
这是我的情况
假设我有两个线程 TA
和 TB
并且我有两个方法 MethodA
和 MethodB
看起来像这个
这是方法A
- (void) MethodA
{
dispatch_async(dispatch_get_main_queue(), ^{
[Myarray addObject:@"SomeObject"];
///----------<TimeFrameA>----------------
[_tableView reloadData]
});
}
这是MethodB
- (void) MethodB
{
dispatch_async(dispatch_get_main_queue(), ^{
//Runs under the assumption the "SomeObject" has already been displayed in Tableview
//Make changes to TableView/
});
}
假设 MethodB
被 ThreadB
调用并发生在 TimeFRameA
期间。
在那种情况下,会在 [_tableView reloadData]
之前调用 MethodB 吗?
有什么方法可以确保 MethodB
仅在 tableView 显示更新数据时运行?
最佳答案
主调度队列(与主线程关联) 是一个串行队列,不是并发的。因此它不可能发生 那在
dispatch_async(dispatch_get_main_queue(), ^{
[Myarray addObject:@"SomeObject"];
///----------<TimeFrameA>----------------
[_tableView reloadData]
});
}
添加对象之间在主队列上执行的任何其他代码 并重新加载表格 View 。
分派(dispatch)到主队列的任何其他 block 都在之前执行 或在此 block 之后。
关于ios - 这种情况下Tableview的reloadData是否立即执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29857041/