通过dispatch_queue_t及dispatch_semaphore_t实现
//创建一个队列,串行并行都可以,主要为了操作信号量
dispatch_queue_t queue = dispatch_queue_create("com.se7en.alert", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
//创建一个初始为0的信号量
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
NSLog(@"弹框1");
[NSThread sleepForTimeInterval:1];
//第一个弹框,UI的创建和显示,要在主线程
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"弹框1" message:@"第一个弹框" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
//点击Alert上的按钮,我们发送一次信号。
dispatch_semaphore_signal(sema);
}]];
[self presentViewController:alert animated:YES completion:nil];
});
//等待信号触发,注意,这里是在我们创建的队列中等待
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
NSLog(@"弹框2");
[NSThread sleepForTimeInterval:1];
//上面的等待到信号触发之后,再创建第二个Alert
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"弹框2" message:@"第二个弹框" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
dispatch_semaphore_signal(sema);
}]];
[self presentViewController:alert animated:YES completion:nil];
});
//同理,创建第三个Alert
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
NSLog(@"弹框3");
[NSThread sleepForTimeInterval:1];
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"弹框3" message:@"第三个弹框" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
dispatch_semaphore_signal(sema);
}]];
[self presentViewController:alert animated:YES completion:nil];
});
});
结果:
2020-08-03 14:10:17.143774+0800 GCDDemo[4731:161332] 弹框1
2020-08-03 14:10:20.254767+0800 GCDDemo[4731:161332] 弹框2
2020-08-03 14:10:22.363951+0800 GCDDemo[4731:161332] 弹框3
网友评论