Есть ли способ написать NSTimer, чтобы он просто останавливал программу на секунду? - PullRequest
3 голосов
/ 19 мая 2010

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

Ответы [ 2 ]

4 голосов
/ 19 мая 2010

Попробуйте вставить код изменения в метод и вызовите метод изменения:

[self performSelector:@selector(changeBack:) withObject:nil afterDelay:1.0];
1 голос
/ 19 мая 2010

Вы можете позвонить

// 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(&ts, NULL);

Или, более современно и более Cocoa-y:

// +sleepForTimeInterval first appeared in Mac OS X 10.5, 2007
[NSThread sleepForTimeInterval:1.0];

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

Ссылка NSObject показывает метод с именем executeSelector: withObject: afterDelay: . Этот метод выполняет селектор после указанной задержки, планируя его в цикле выполнения. Это означает, что цикл выполнения продолжает циклически повторять и обрабатывать события, таймеры срабатывания, опустошать пул автоматического выпуска, отправлять больше запланированных сообщений и т. Д. И т. Д.

В этом конкретном случае, вероятно, лучше запланировать селектор в цикле выполнения (предоставьте селектор, который изменяет изображение обратно и обеспечивает задержку в секунду).

...