iOS - 默认情况下,选择器/处理程序是否在主队列上运行?

问题描述 投票:4回答:1

假设,我从主要胎面上展示UIAlertController,比如myAlertmyAlert有一个动作,defaultAction。我想知道defaultActions处理程序默认是否在主队列上运行。换句话说,我想知道在下面的代码中doStuff中是否存在一些与UI相关的操作,我是否需要用主队列包装这些UI任务,或者保证它可以通过OS在主队列中运行?

UIAlertController* myAlert = [UIAlertController alertControllerWithTitle:@"My Alert"
                               message:@"This is an alert."
                               preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
   handler:^(UIAlertAction * action) {
      doStuff() // should I wrap doStuff in main queue, if doStuff has ui operations?
   }
];

[alert addAction:defaultAction];
[self presentViewController:alert animated:YES completion:nil];
ios multithreading thread-safety handler uialertcontroller
1个回答
7
投票

您实际上是在询问它是否在主队列上运行,而不是它是否是线程安全的。

如果一个对象可以从多个线程访问/修改而没有问题,则它是“线程安全的”。

您的问题的答案是操作闭包将在主队列上运行,因为它是由用户交互产生的,因此您不需要将UI更新显式地分派到主队列。

© www.soinside.com 2019 - 2024. All rights reserved.