ios - 这种情况下Tableview的reloadData是否立即执行

标签 ios objective-c uitableview

我读到 [_tableView reloadData] 向主队列发送消息以更新和显示 TableView 中的数据。基于此,我想讨论以下案例。假设另一个方法在 [_tableView reloadData] 之前向主队列发送一条消息,那么第二条消息会在 [_tableView reloadData] 之前得到处理吗?

这是我的情况

假设我有两个线程 TATB 并且我有两个方法 MethodAMethodB 看起来像这个

这是方法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/
                });
}

假设 MethodBThreadB 调用并发生在 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/

相关文章:

objective-c - 加载 xib 时出现 NSUnknownKeyException

objective-c - 在单点触控中构建静态库

ios - swift 4 中的 RxSwift,将数据绑定(bind)到 tableview

ios - 防止 UITableView 滚动到某个点以下

ios - 如何获取自动续订订阅的到期日期

ios - 从 App Store 以外的地方下载 Xcode

ios - 在 App Store 上发布应用程序时出现问题 [非公开 API 使用]

ios - AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)

ios - Facebook 被拒绝 - iOS 模拟器构建配置不正确

ios - 如何在堆栈中存储 NSString