假设我正在从主胎面提出一个UIAlertController
,例如myAlert
。 myAlert
有一个动作defaultAction
。我不知道默认情况下defaultAction
的处理程序是否在主队列上运行。换句话说,我想知道下面的代码在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];
您实际上是在询问它是否在主队列上运行,而不是它是否线程安全。
如果一个对象可以从多个线程访问/修改而没有问题,则它是“线程安全的”。
您的问题的答案是,操作关闭将由于用户交互而在主队列上运行,因此您无需将UI更新显式分派到主队列上。