iphone – dismissViewControllerAnimated:完成:有几秒钟的延迟 - 代码日志

iphone – dismissViewControllerAnimated:完成:有几秒钟的延迟

dismissViewControllerAnimated:完成:在我的应用程序中正常工作,除了解雇之间的延迟。

[api loginWithUsername:[dict objectForKey:@"username"] andPassword:[dict objectForKey:@"password"] andSuccessBlock:^(id json) {
    NSLog(@"DONE... %@", [json objectForKey:@"status"]);
    NSString *status = [json objectForKey:@"status"];
    if([status isEqualToString:@"ok"]){
        app.user = [json objectForKey:@"data"];
        [self dismissViewControllerAnimated:YES completion:nil];
    }else{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"could not log you in" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alert show];
    }
}];

在我的控制台中,我可以看到echo’ed“DONE … ok”,意思是回调块被执行,但是大约3-4秒钟后,模态视图终于被解除了。

可能导致这种延迟?

如果您不保证您的UI代码在主线程上运行,则可能会运行在其他方面,在这种情况下,您将会经历几秒钟的延迟!

您可以添加它以确保在主线程上运行解雇:

dispatch_async(dispatch_get_main_queue(), ^{
    [self dismissViewControllerAnimated:YES completion:nil];
});

通常,这不是一个问题,因为大多数代码将已经在主线程上运行,因为我们主要添加从UIKit方法运行的代码,如viewDidLoad等。这些方法保证在主线程上运行。

当您最终在另一个线程上运行代码时,会出现此问题。可能发生的一种情况是例如在完成块调用网络库时,其中请求在后台完成。

http://stackoverflow.com/questions/14341739/dismissviewcontrolleranimatedcompletion-has-a-couple-second-delay

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:iphone – dismissViewControllerAnimated:完成:有几秒钟的延迟