iOS - 在哪个队列选择器中 运行 默认打开?
iOS - In which queue selectors run on by default?
假设,我正在展示 UIAlertController
,比如 myAlert
,来自主要部分。 myAlert
有一个动作,defaultAction
。我想知道 defaultAction
s 处理程序是否默认在主队列上 运行s。换句话说,我想知道在下面的代码中 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];
你实际上是在问它是否 运行 在主队列上,而不是它是否是线程安全的。
一个对象是 "thread safe" 如果它可以从多个线程 accessed/modified 没有问题。
你的问题的答案是,动作闭包将 运行 在主队列上,因为它是由用户交互产生的,所以你不需要显式地将 UI 更新分派到主队列排队。
假设,我正在展示 UIAlertController
,比如 myAlert
,来自主要部分。 myAlert
有一个动作,defaultAction
。我想知道 defaultAction
s 处理程序是否默认在主队列上 运行s。换句话说,我想知道在下面的代码中 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];
你实际上是在问它是否 运行 在主队列上,而不是它是否是线程安全的。
一个对象是 "thread safe" 如果它可以从多个线程 accessed/modified 没有问题。
你的问题的答案是,动作闭包将 运行 在主队列上,因为它是由用户交互产生的,所以你不需要显式地将 UI 更新分派到主队列排队。