我被要求减少 iOS 应用程序的启动时间。我对一般的平台/工具非常熟悉,但我之前没有关注应用程序的启动时间。我想知道是否有已知的攻击这个问题的模式?
我意识到我可以简单地测量从 main() 到完成application:didFinishLaunchingWithOptions:
(包括任何后台加载任务)所花费的时间,但是我希望可能有一种更标准化的方法来做到这一点。
任何建议将不胜感激!
-M
我被要求减少 iOS 应用程序的启动时间。我对一般的平台/工具非常熟悉,但我之前没有关注应用程序的启动时间。我想知道是否有已知的攻击这个问题的模式?
我意识到我可以简单地测量从 main() 到完成application:didFinishLaunchingWithOptions:
(包括任何后台加载任务)所花费的时间,但是我希望可能有一种更标准化的方法来做到这一点。
任何建议将不胜感激!
-M
来自 WWDC 2012 会议 235
在代码的第一行设置起点main.m
#import <UIKit/UIKit.h>
CFAbsoluteTime StartTime;
int main(int argc, char *argv[])
{
StartTime = CFAbsoluteTimeGetCurrent();
@autoreleasepool {
...
AppDelegate
在's中的某处设置终点application:didFinishLaunchingWithOptions:
extern CFAbsoluteTime StartTime;
...
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Launched in %f sec", CFAbsoluteTimeGetCurrent() - StartTime);
});
您的方法听起来很正确(我建议您使用 CFAbsoluteTime 进行测量)。
可以帮助您减少启动时间的一件事是避免在应用程序启动时从 nib 加载视图控制器。如果我没记错的话,这甚至会在您的应用程序启动之前强制它们被加载到内存中。相反,在需要时动态分配和初始化视图控制器。请注意,您仍然可以让视图控制器加载您希望存储在 Nibs 中的视图,您不必停止使用 IB。只是不要使用 IB 为您的应用程序委托设置静态插座。