为什么在requestAccessToEntity中使用performSegueWithIdentifier时使用dispatch_async:完成?

当我在完成块中调用performSegueWithIdentifier时,如果我不把这个调用包装在dispatch_async中,实际上需要10秒的时间。 但是,我可以做其他事情,而不用包装在同一个dispatch_async中,比如做核心数据工作,或者logging“事物”…

任何有关这如何工作的见解,为什么…我迷路了。 如果这不是问这个问题的地方,我很抱歉。

EKEventStore *store = [[EKEventStore alloc] init]; [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { dispatch_async(dispatch_get_main_queue(), ^{ [self performSegueWithIdentifier:self.phaseSegue sender:self]; }); }]; 

从文档 :

当用户点击授予或拒绝访问时,完成处理程序将在任意队列上被调用。

而且,所有与UI相关的东西都必须在主队列上完成。 这就是你需要dispatch_async