我有一个UINavigationController,在UINavigationBar上我有一个按钮。当我按下这个按钮时,一个新的UINavigationController以UIModalPresentationFormSheet的形式出现。这是可行的。
但我认识到FormSheet的表示相当耗时。我在操作方法中放入了两个日志("start“和"finish",参见下面的代码),一个在第一行,另一个在最后一行。日志时间告诉我,运行这段代码大约需要1,5到2秒。
这是从UINavigationItem调用的操作方法:
- (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%的时间。
有谁知道这里发生了什么以及如何优化它吗?
发布于 2012-06-01 17:05:09
用FooViewController预加载UINavigationController,这样当您呈现它时,它已经在内存中了。
加载FooViewController实例的视图可能会花费很多时间。
您可以通过对其执行某些操作来使其加载。喜欢
UIView *view = fooContr.view;
您应该在显示模式视图控制器的按钮被单击之前执行此操作。否则,它可能会有相同的效果。
发布于 2012-06-01 17:02:43
性能问题一定是因为您的navContrManAufn需要时间来自行创建。它在init上执行什么?
发布于 2012-06-01 17:09:27
在viewControllers中尽量减少初始化中的代码,尽可能将代码转移到viewDidLoad,甚至是viewDidAppear (只运行一次的代码应该在viewDidload中)。
https://stackoverflow.com/questions/10847318
复制相似问题