执行segue占用太多时间

时间:2015-05-06 12:27:28

标签: ios objective-c xcode6 grand-central-dispatch

我的应用中有-[self performsSegueWithIdentifier:..]方法。点击" GO"键盘上的按钮。由于此时正在调用API,因此加载数据大约需要5秒钟。所以,我在-endEditing之后添加了-buttonAction命令。我还放了一个ActivityIndi​​cator。我尝试了两种方法。

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];
});

在第一种方法中,我让键盘消失,ActivityIndi​​cator开始制作动画。但是移动到下一个ViewController大约需要20秒(我已经检查过断点:应用程序从-prepareForSegue:中的最后一个命令移动到下一个ViewController中的第一个命令的时间大约是15-18秒) 。 在第二种方法中,转换不需要任何时间,但-shouldEndEditing部分和-startAnimating部分未被执行。

1 个答案:

答案 0 :(得分:1)

试试这个:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [self performSegueWithIdentifier:@"toSecond" sender:self];
});