pushViewController 极慢

Posted

技术标签:

【中文标题】pushViewController 极慢【英文标题】:pushViewController Extremely slow 【发布时间】:2014-09-09 22:37:10 【问题描述】:

什么可能导致 pushViewController 非常慢? (新视图出现需要 30 多秒)

基本上,我正在做这样的事情:

SecondViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"correctID"];
vc.something = something;
[self.navigationController pushViewController:vc animated:YES];
CLS_LOG(@"Pushed Controller...");

我在第二个视图控制器内的 viewdidload 开头记录。 我没有继承其他方法。

在 Pushed Controller... 和 viewdidload 的下一个日志之间有很大的延迟。

你会如何调试这个?

我已经尝试过使用 TimeProfiler,但显然它什么也没显示。

【问题讨论】:

我猜想您的 SecondViewController 的 viewDidLoadviewWillAppearviewDidAppear 方法中的某些内容需要很长时间。只是为了调试,尝试注释掉他们的内容,看看是什么导致了你的问题。 您确定在主线程中运行该代码吗?向我们展示更多背景信息。 【参考方案1】:

之前遇到过类似的问题,试试下面的

dispatch_async(dispatch_get_main_queue(), ^
    // your navigation controller action goes here
);

【讨论】:

你说得对,成功了。我没有在主线程中运行该代码。【参考方案2】:

迪诺的回答救了我的命。他得到了我的支持。我只是为现代 swift 用户添加这个。

     DispatchQueue.main.async 
          self.navigationController?.pushViewController(vc, animated: true)
     

【讨论】:

这样做后还有人遇到问题吗?我是。但我认为这与推送到 WebKit 视图有关。非常沮丧。 @tjberte,您是否将推送设置为在网络调用返回之后或之前发生? 可能需要更多细节。 ***.com/questions/3852257/… 接近我所做的。我在第一次加载时加载了一个 UIView,然后用 viewDidAppear 加载了 WebView。【参考方案3】:

设置背景颜色,例如vc.view.backgroundColor = .white 为我解决了这个问题。

【讨论】:

以上是关于pushViewController 极慢的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle 中运行速度极慢的 Postgres 查询

解决UINavigationController在pushViewController时出现的"卡顿"问题

是否可以使用完成块推送View Controller?

解惑:SecureRandom极慢

pushviewcontroller 动画而不实际调用 pushviewcontroller

如何在不使用 pushviewcontroller 的情况下制作“pushviewcontroller”动画?