动态计算应用程序加载时间

时间:2010-05-15 05:47:05

标签: iphone objective-c xcode

如何运行一个时钟,让我可以测量加载到appDidFinishLaunching的时间?

我想设置一个睡眠调用,将Defaul.png显示时间扩展到3秒,而不管底层硬件的速度如何。

1 个答案:

答案 0 :(得分:0)

首先,您应该知道iPhone OS中的Springboard对加载时间有点挑剔。在应用程序的加载过程中,您永远不应该在某处进行睡眠调用。如果Springboard检测到您的应用程序启动时间太长,则应用程序将在崩溃日志中以“无法及时启动”终止。

其次,就我所知,还没有衡量应用程序启动时间的方法。当用户点击跳板上的应用程序图标时,会发生一些事情,而且iPhone OS没有为您的应用程序提供任何好的信息。

一种解决方案可能是确保您的applicationDidFinishLaunching: 非常轻量级,并创建“假”Default.png叠加层。通过减少applicationDidFinishLaunching:方法只执行最基本的操作,并在后台执行任何耗时的任务,您可以确保Default.png叠加层在不同的硬件上大致同时显示。

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // Create the image view posing with default.png on top of the application
    UIImageView *defaultPNG = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default.png"]];
    // Add the image view top-most in the window
    [window addSubview:defaultPNG];

    [window makeKeyAndVisible];

    // Begin doing the time consuming stuff in the background
    [self performSelectorInBackground:@selector(loadStuff) withObject:nil];

    // Remove the default.png after 3 seconds
    [self performSelector:@selector(removeDefaultPNG:) withObject:defaultPNG afterDelay:3.0f];
}

- (void)removeDefaultPNG:(UIImageView *)defaultPNG {
    // We're now assuming that the application is loaded underneath the defaultPNG overlay
    // This might not be the case, so you can also check here to see if it's ok to remove the overlay
    [defaultPNG removeFromSuperview];
    [defaultPNG release];
}

如果您在loadStuff方法中添加了更多视图(视图控制器等),则应将它们插入defaultPNG叠加层下方。您还应该了解从另一个线程执行这些操作可能会发生的问题。如果遇到问题,可以使用performSelectorOnMainThread:withObject:waitUntilDone: