【问题标题】:pushViewController Extremely slowpushViewController 极慢
【发布时间】: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 方法中的某些内容需要很长时间。只是为了调试,尝试注释掉他们的内容,看看是什么导致了你的问题。
  • 您确定在主线程中运行该代码吗?向我们展示更多背景信息。

标签: ios objective-c


【解决方案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,您是否将推送设置为在网络调用返回之后或之前发生?
  • 可能需要更多细节。
  • 接近我所做的。我在第一次加载时加载了一个 UIView,然后用 viewDidAppear 加载了 WebView。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多