Прежде всего, вы должны знать, что Springboard в iPhone OS довольно требователен ко времени загрузки. Вы никогда не должны делать спящий вызов где-нибудь в процессе загрузки вашего приложения. Если 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:
, если у вас возникнут проблемы.