Как перестать выполнять селектор? - PullRequest
5 голосов
/ 28 июля 2011

Я пытаюсь выяснить, как остановить выполнение селектора

Я могу начать с этого

            [self performSelector:@selector(vibe)];

Но я пытаюсь понять, как я могу это остановить.

Любая помощь будет очень ценится .. Спасибо!

Ответы [ 3 ]

9 голосов
/ 28 июля 2011

Метод performSelector: эквивалентен отправке селекторного сообщения непосредственно получателю, поэтому его нельзя отменить.То есть эти две строки имеют одинаковый эффект:

[self performSelector:@selector(vibe)];
[self vibe];

Методы cancelPreviousPerformRequestsWithTarget: (и аналогичные) могут отменить только те сообщения селектора, которые не выполняются немедленно.Вы можете отправить такое сообщение с помощью методов performSelector:withObject:afterDelay: (и аналогичных).

См. Таблицу 3-2 раздела Управление циклами программирования потоков Apple.Руководство для получения дополнительной информации.

7 голосов
/ 28 июля 2011
[NSObject cancelPreviousPerformRequestsWithTarget:self];
// or
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(vibe) object:nil];
1 голос
/ 28 июля 2011

Это не сразу очевидно, но я считаю, что должно работать следующее:

[NSObject cancelPreviousPerformRequestsWithTarget:self];
...