2

我有一个 UINavigationController 和 UINavigationBar 我有一个按钮。当我按下这个按钮时,一个新的 UINavigationController 以模式呈现为 UIModalPresentationFormSheet。这行得通。

但我认识到 FormSheet 的呈现非常耗时。我在 action 方法中放了两个日志(“start”和“finish”,见下面的代码),一个在第一行,一个在最后一行。日志时间告诉我,运行此代码大约需要 1.5 到 2 秒。

这就是从 UINavigationItem 调用的 Action 方法:

- (IBAction)addBtnPressed:(id)sender{
  NSLog(@"start");

  FooViewController *fooContr = [[FooViewController alloc] init];
  fooContr.delegate = self;
  UINavigationController *navContr = [[UINavigationController alloc] initWithRootViewController:fooContr];
  [fooContr release];
  navContr.modalPresentationStyle = UIModalPresentationFormSheet;

  [self.navigationController presentModalViewController:navContr animated:YES];

  [navContr release];

  NSLog(@"finish");

}

好像这条线

 [self.navigationController presentModalViewController:navContr animated:YES];

需要 90% 的时间。

有谁知道这里发生了什么以及如何优化它?

4

3 回答 3

2

UINavigationController用 the预加载,FooViewController所以当你展示它时它已经在内存中了。

加载FooViewController实例视图可能需要花费这么多时间。

您可以通过对其执行某些操作来使其加载。像

UIView *view = fooContr.view;

您应该在单击显示模态视图控制器的按钮之前执行此操作。否则它可能会产生相同的效果。

于 2012-06-01T09:05:09.267 回答
0

性能问题一定是因为您navContrManAufn需要时间来创建自己。它在 init 时执行什么?

于 2012-06-01T09:02:42.637 回答
0

最小化您在 viewControllers 中的 init 中的代码,在可能的情况下将代码移动到 viewDidLoad 甚至 viewDidAppear(应该只运行一次的代码应该在 viewDidload 中)。

于 2012-06-01T09:09:26.963 回答