Как остановить последовательность основного потока с учетом временной задержки?

#iphone #objective-c #ios #cocoa-touch #ipad

#iPhone #цель-c #iOS #прикосновение какао #iPad #objective-c #cocoa-touch

Вопрос:

Я пытаюсь загрузить пользовательский класс UIActivityIndicatorView, однако я пытаюсь внедрить общую временную задержку до появления нового представления после отображения моего UIActivityIndicatorView. Я попробовал выполнить часть afterDelay, но это предположительно не останавливает основной поток, а скорее выполняет что-то через 5 секунд. То, что я ищу, — это что-то, что действительно могло бы остановить выполнение до тех пор, пока не истечет 5 секунд. Есть ли способ сделать это в iPhone? Я, конечно, могу написать другой метод и вызвать всплывающее окно new view после определенной задержки, но тогда мне пришлось бы вызывать этот способ обычно на каждом ViewController. Есть ли какой-либо общий способ обойти это?

Ответ №1:

Индикатор активности вашего пользовательского интерфейса не будет отображаться до тех пор, пока вы не перейдете к основному циклу выполнения. Способ остановить выполнение вашего приложения — это выйти (return from) из вашего текущего метода.

Чтобы завершить выполнение чего-либо через 5 секунд, переведите это в другой метод и используйте NSTimer или очередь отложенных операций для перезапуска обработки вашего приложения. Это универсальное решение, которое не приведет к зависанию пользовательского интерфейса (и индикаторов активности).

Комментарии:

1. Я сделал именно так, но это приводит к тому, что мой таймер по какой-то причине не запускается. Мой таймер выглядит следующим образом.. NSTimer * time; time = [NSTimer scheduledTimerWithTimeInterval: 1.0 вызов: повторений nil: НЕТ]; затем я прекращаю анимацию своего индикатора uiactivityindicator.

2. Где метод продолжения, указанный в вашем таймере?

3. ну, у меня создалось впечатление, что таймер в основном отложил бы транзакцию следующего выполнения, или я предполагаю, что я смешиваю это с методом sleep?

4. Это приведет к задержке, если вы вернетесь сразу после установки таймера. Попробуйте оператор return.

Ответ №2:

Вы не хотите этого делать, блокировка основного потока ПЛОХА и может привести к 8badf00d. Подумайте о перепроектировании вашего решения, чтобы избежать блокировки основного потока.

Комментарии:

1. ну, это всего лишь временно, пока я на самом деле не вызову приложение на устройстве и на самом деле не получу некоторую задержку в реальном времени, а не симулятор, который работает очень БЫСТРО .. Однако, если вы заметили, что есть некоторые приложения, которые делают это, например, вход в bank of america, всего за мои 2 цента здесь. Я знаю, что это очень плохая конструктивная особенность.