如何运行一个时钟,让我可以测量加载到appDidFinishLaunching的时间?
我想设置一个睡眠调用,将Defaul.png显示时间扩展到3秒,而不管底层硬件的速度如何。
答案 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:
。