1

在提高我的应用程序的性能时,我试图减少 UIViewController 加载和显示所需的时间。我已经标记了我的每个方法以记录每个方法加载所需的时间(这是在旧 iPhone 4 上完成的,以夸大时间)。

2013-07-03 15:50:32.546 MyApp[3047:907] init begin
2013-07-03 15:50:32.590 MyApp[3047:907] init end
2013-07-03 15:50:33.085 MyApp[3047:907] viewDidLoad begin
2013-07-03 15:50:33.194 MyApp[3047:907] viewDidLoad end

如您所见,init 结束和 viewDidLoad 开始之间大约有 0.5 秒。据我了解,这是 loadView 发生的地方,但我并没有真正触及它。

我的问题是:这里减少加载时间的最佳做法是什么?有什么我能够以编程方式做的,还是严格限制设备?


编辑:

一些代码:

MyViewController *myViewController = [[MyViewController alloc] init];
UINavigationController *myNavController = [[UINavigationController alloc] initWithRootViewController:myViewController];
myNavController.navigationBar.barStyle = UIBarStyleBlack;

[myNavController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[self presentViewController:myNavController animated:YES completion:nil];

更多时间日志:

2013-07-03 21:07:26.813 MyApp[3612:907] begin presentViewController:animated:completion
2013-07-03 21:07:27.292 MyApp[3612:907] begin viewDidLoad
2013-07-03 21:07:27.401 MyApp[3612:907] finish viewDidLoad
2013-07-03 21:07:27.444 MyApp[3612:907] finish presentViewController:animated:completion
2013-07-03 21:07:27.508 MyApp[3612:907] begin loading tableView
2013-07-03 21:07:27.760 MyApp[3612:907] finish loading tableView
2013-07-03 21:07:28.513 MyApp[3612:907] viewDidAppear

我的视图控制器是从 NIB 加载的,包含一个 tableView 和一个 UIDatePicker。begin presentViewController:animated:completion 和 begin viewDidLoad 之间似乎有 0.5 秒的间隔。由于我这里没有任何代码,我不知道在哪里/如何减少这个时间,或者是否有可能。

4

3 回答 3

3

日志输出对性能有影响。如果没有这些日志输出语句,这可能会快很多。

但是,当您通过仪器时间分析器运行代码时,这真的是代码中最慢的区域吗?我不信。

分析您的代码并首先专注于提高最大瓶颈的性能。

于 2013-07-03T20:11:03.043 回答
0

如果您要从 Internet 加载大尺寸的图像,您可以使用延迟加载,它会在图像加载之前放置初始图像,这将有助于更快地显示视图。

于 2013-07-04T14:00:23.547 回答
0

建议在后台线程上执行需要更长任务的任务,但请记住 UI 特定需要在主线程上完成,因为 UIKit 组件不是线程安全的。

例如,如果您在图像视图上显示图像,这些图像最初是从互联网加载的,则加载任务必须在后台线程上完成,一旦图像的数据被加载,就在主线程上渲染它。

您上面提到的方法是视图控制器的生命周期,它使您可以灵活地定义在特定情况下可以实现的内容。例如,在 init 中,您可以初始化所有实例变量,在 viewDidLoad 上,您可以设置您的组件,并且还有另一种方法被称为 viewWillAppear,每次视图出现和消失时,都可以设置和重置委托、通知、观察员和其他人。

还有其他一些方法,如 viewDidAppear、viewDidDisappear、viewDidUnload(从 iOS 6.0 弃用)等来处理视图控制器的生命周期事件,在其他状态下控制和管理视图控制器的状态。

于 2013-07-03T21:08:54.197 回答