pushViewController需要太多才能显示视图

时间:2012-12-21 20:40:05

标签: objective-c ios cocoa-touch

我有一个非常轻的ViewController,它在viewDidLoad中什么都不做。我在navigationController的顶部推动这个视图。执行此操作的方法是从块内部调用的。在调用showView后我添加了一个NSLog,并且该日志在控制台中打印速度非常快,但视图需要加载很多...我真的不明白可能发生的事情......任何想法???

ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
    [self showView];
    NSLog(@"EXECUTED");                
});

- (void) showView{
    TestViewController *test = [[TestViewController alloc]init];
    [self.navigationController pushViewController:test animated:NO];
}

2 个答案:

答案 0 :(得分:9)

来自ABAddressBookRequestAccessWithCompletion的文档:

  

在任意队列上调用完成处理程序。如果您的应用在整个应用中使用地址簿,则您有责任确保将该地址簿的所有使用情况分发到单个队列,以确保正确的线程安全操作。

您应该确保在主线程上调用您的UI代码。

ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error {
     dispatch_async(dispatch_get_main_queue(), ^{
         [self showView];
         NSLog(@"EXECUTED");                
     });
});

答案 1 :(得分:1)

这可能不是唯一的问题,但根据docs,传递给ABAddressBookRequestAccessWithCompletion的完成处理程序在任意队列上调用。 -showView只应在主队列上调用,因为它处理的是UIViewController个对象。

要问的另一件事是主队列上还发生了什么?还有其他可能阻止UI更新的长期任务吗?