При выполнении длительных задач при запуске приложения есть несколько соображений.
Приложение завершило запуск
Вы должны завершить - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
в течение определенного периода времени, который, как я считаю, составляет 20 секунд, в противном случае ваше приложение будет закрыто от сторожевого таймера
Примечание о сбоях WatchDog
Что я обычно делаю, это создаю LoaderViewController и добавляю его как подпредставление окна. Я все еще установил корневой контроллер представления приложения к первому контроллеру представления все же. это по существу передает управление загрузкой контроллеру представления загрузчика для выполнения ваших функций.
Хотя это иногда осуждается Руководством Apple по человеческому интерфейсу
Избегайте отображения окна «О программе», заставки или предоставления каких-либо
другой тип опыта запуска, который мешает людям использовать ваш
заявление немедленно.
Руководство по интерфейсу пользователя iOS
Не блокируется
Вы также захотите выполнить все свое копирование в фоновом режиме с помощью GrandCentral Dispatch или используйте - (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
, чтобы предотвратить блокировку основного потока. Таким образом, вы можете представить UIActivityIndicatorView
, который продолжает вращаться во время выполнения задачи.
Grand Central Dispatch
Grand Central Dispatch, вероятно, лучший способ справиться с этим. Вы можете выполнить свою задачу в фоновом режиме и обновить основной поток, например, UIProgressView в том же блоке, как этот
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Do something in background
dispatch_async(dispatch_get_main_queue(), ^{
//Update UI
});
});
По завершении удалите LoaderViewController [loaderViewController removeFromSuperview];
, и ваше приложение перейдет к первому контроллеру. В это время вы также можете обновить пользовательский интерфейс для отображения обновленной информации.
Справочник по центральному отправлению