执行 segue 占用太多时间
Performing segue taking up too much time
我的应用程序中有一个 -[self performsSegueWithIdentifier:..]
方法。单击键盘中的 "GO" 按钮后调用它。由于此时正在调用 API,因此加载数据大约需要 5 秒。所以,我在 -buttonAction
后面放了一个 -endEditing
命令。我还放入了一个 ActivityIndicator。我试过两种方法。
1.
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
dispatch_async(queue, ^{
[self performSegueWithIdentifier:@"toSecond" sender:self];
});
2.
dispatch_async(dispatch_get_main_queue(), ^(void){
[self performSegueWithIdentifier:@"toSecond" sender:self];
});
在第一种方法中,我让键盘消失,让 ActivityIndicator 开始动画。但是移动到下一个 ViewController 大约需要 20 秒(我检查了断点:应用程序从 -prepareForSegue:
中的最后一个命令移动到下一个 [=28= 中的第一个命令的时间] 大约 15-18 秒)。
在第二种方法中,转换不需要任何时间,但是 -shouldEndEditing
部分和 -startAnimating
部分没有被执行。
试试这个:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"toSecond" sender:self];
});
我的应用程序中有一个 -[self performsSegueWithIdentifier:..]
方法。单击键盘中的 "GO" 按钮后调用它。由于此时正在调用 API,因此加载数据大约需要 5 秒。所以,我在 -buttonAction
后面放了一个 -endEditing
命令。我还放入了一个 ActivityIndicator。我试过两种方法。
1.
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
dispatch_async(queue, ^{
[self performSegueWithIdentifier:@"toSecond" sender:self];
});
2.
dispatch_async(dispatch_get_main_queue(), ^(void){
[self performSegueWithIdentifier:@"toSecond" sender:self];
});
在第一种方法中,我让键盘消失,让 ActivityIndicator 开始动画。但是移动到下一个 ViewController 大约需要 20 秒(我检查了断点:应用程序从 -prepareForSegue:
中的最后一个命令移动到下一个 [=28= 中的第一个命令的时间] 大约 15-18 秒)。
在第二种方法中,转换不需要任何时间,但是 -shouldEndEditing
部分和 -startAnimating
部分没有被执行。
试试这个:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"toSecond" sender:self];
});