2012-04-17 4 views

ответ

2

Если вы внимательны о потоке, на котором вы изначально поставлены в очередь сообщение, вы можете отменить его, вызывая + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget на том же потоке. В предыдущем ответе отсутствовал важный бит:

Вы не можете отменять сообщения, поставленные в очередь с использованием этого метода. Если вы хотите, чтобы опция отменила сообщение в текущем потоке, вы должны использовать либо performSelector: withObject: afterDelay: или performSelector: withObject: afterDelay: inModes: method.

+0

Большое спасибо за разъяснение! – Winston

3

Пер с documentation:

Вы не можете отменить сообщения очередей с помощью этого метода.

+0

Спасибо за это. – Winston

+2

Этот ответ вводит в заблуждение; вы ** можете ** отменить сообщение в очереди, вызвав 'cancelPreviousPerformRequestsWithTarget:' в том же потоке. См. Мой ответ ниже. – samvermette

+0

@samvermette: вы можете отменить сообщения, если и цель, и вызывающий находятся в одном потоке. Вы можете ** не **, если цель или вызывающая сторона находятся в другом потоке, что и спрашивал ОП. –

Смежные вопросы