#iphone #objective-c #nstimer
#iPhone #objective-c #nstimer
Вопрос:
Пытаюсь изменить изображение кнопки, подождите секунду, затем измените обратно. Не очень удачно пытаюсь заставить это работать, так есть ли способ просто приостановить программу на секунду, без того, чтобы таймер фактически что-либо выполнял, и без продолжения работы программы с кодом?
Ответ №1:
Попробуйте поместить код возврата изменений в метод и вызвать из вашего метода изменений:
[self performSelector:@selector(changeBack:) withObject:nil afterDelay:1.0];
Комментарии:
1. есть ли способ передать эти 2 объекта для параметров селектора? я нашел один с 2 withObject:s, но в нем нет задержки after.
2. @marty: Добавьте оба объекта в NSArray и передайте NSArray в качестве объекта.
3. Я предпочитаю использовать словарь, поскольку его можно легко расширить до любого количества именованных аргументов с большей удобочитаемостью / ремонтопригодностью, чем массив.
Ответ №2:
Вы можете вызвать
// sleep first appeared in Version 7 UNIX, 1979
sleep(1);
Или, более современно:
// usleep appeared in 4.3 BSD, released 1986
usleep(1000000);
Или, еще раз более скромно:
// nanosleep can be found in POSIX.1b, published 1993
struct timespec ts;
ts.tv_sec = 1;
nanosleep(amp;ts, NULL);
Или, более современно и более какао-в:
// sleepForTimeInterval first appeared in Mac OS X 10.5, 2007
[NSThread sleepForTimeInterval:1.0];
Все это остановит текущий поток. Если в вашем приложении есть только один поток, это означает, что он остановит все ваше приложение. Он не будет реагировать на какие-либо события пользовательского интерфейса на время ожидания.
Ссылка на NSObject показывает метод с именем performSelector:withObject:afterDelay:. Этот метод выполняет селектор после указанной задержки, планируя его в цикле выполнения. Это означает, что цикл выполнения продолжает повторяться и обрабатывать события, запускать таймеры, истощать пул авторелизов, отправлять больше запланированных сообщений и так далее, и тому подобное.
В данном конкретном случае, вероятно, лучше запланировать селектор в цикле выполнения (укажите селектор, который изменяет изображение обратно, и обеспечьте задержку в секунду).