Почему создание UIAlertView занимает так много времени? - PullRequest
4 голосов
/ 26 января 2012

У меня есть некоторый код для приложения для iOS, которое я разрабатываю, и по какой-то причине то, что кажется быстрым и простым заданием, занимает у моего iPhone 4S целую секунду или больше, каждый раз.

контекст такой ... У меня есть всплывающее окно с двумя кнопками ActionSheet, и если пользователь нажимает одну из кнопок, приложение, похоже, останавливается примерно на секунду.Вот код:

    -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{
    if (buttonIndex == 0) 
    {

        UIAlertView* newTimerAlertView = [[[UIAlertView alloc] initWithTitle:@"Create New Timer" 
                                                                    message:@"Enter a name for your new indicator" 
                                                                   delegate:self 
                                                          cancelButtonTitle:@"Cancel" 
                                                          otherButtonTitles:@"Create", nil] autorelease];
        newTimerAlertView.tag = kNewTimer;
        newTimerAlertView.alertViewStyle = UIAlertViewStylePlainTextInput;
        [newTimerAlertView show];
    }
    else if (buttonIndex == 1)
    {
        NSLog(@"ActionSheet button 2 tapped");
        UIAlertView* newTallyAlertView = [[[UIAlertView alloc] initWithTitle:@"Create New Tally" 
                                                                        message:@"Enter a name for your new indicator" 
                                                                    delegate:self 
                                                          cancelButtonTitle:@"Cancel" 
                                                          otherButtonTitles:@"Create", nil] autorelease];
        newTallyAlertView.tag = kNewTally;
        newTallyAlertView.alertViewStyle = UIAlertViewStylePlainTextInput;
        [newTallyAlertView show];
        NSLog(@"end");
    }
}

Сосредоточив внимание на второй кнопке для простоты (хотя первая кнопка ведет себя так же), журнал выглядит так:

2012-01-25 20:35:46.330 ...[177:707] ActionSheet button 2 tapped
2012-01-25 20:35:47.194 ...[177:707] end
2012-01-25 20:35:56.154 ...[177:707] ActionSheet button 2 tapped
2012-01-25 20:35:56.180 ...[177:707] end

Обратите внимание, что перваяесли я попробую это сделать, пройдет более секунды, прежде чем завершится выполнение фрагмента кода, но во второй раз (и все последующие) код занимает всего около 30 миллисекунд.

Что-то не так с кодом?или мне просто нужно компенсировать задержку с помощью просмотра хода выполнения?

Спасибо!

РЕДАКТИРОВАТЬ: Это происходит только на устройствах при запуске приложения из XCode... может быть это связано с отладчиком?

Ответы [ 2 ]

3 голосов
/ 26 января 2012

Теперь я понимаю, что если оповещение отсутствует в главном потоке, оно может быть отложено

0 голосов
/ 26 января 2012

Xcode не замедляет просмотр предупреждений в любой ситуации, с которой я столкнулся.

Ваш код выглядит довольно ванильно, поэтому я подозреваю, что что-то происходит за пределами фрагмента, который вы опубликовали.

Я вижу, что вы ссылаетесь на таймеры ... возможно, это проявление чего-то другого, например, обратного вызова таймера, срывающегося в главном потоке?Попробуйте использовать Time Profiler или инструменты System Trace, чтобы выяснить, что блокирует (что-то, безусловно, есть).

...