alguém sabe se é possível cancelar eventos do seletor já enfileirados da pilha de eventos ou da pilha do cronômetro (ou de qualquer mecanismo utilizado pela API) quando você chama performSelector:withObject:afterDelay
?
Eu estava usando essa pilha de eventos para alterar os atributos de uma imagem dentro de uma guia TabBar e às vezes enfileirava até 10 segundos de alterações em um loop executado rapidamente ... talvez 5 milissegundos ou mais.
o problema surge se o usuário alternar as guias ... digamos, tenho as alterações de imagem enfileiradas para uma imagem que é exibida assim que a guia nº 4 é ativada e, em seguida, o usuário muda rapidamente para a guia nº 3 e depois volta para a guia # 4 ... isso iria então re-enfileirar mais 10 segundos no valor de alterações enquanto a fila antiga ainda estava tocando, provavelmente cerca de 2 ou 3 segundos na fila se trocada rápido o suficiente ... mas mesmo chegando a 5 segundos para o fluxo era um problema.
então eu precisava de alguma forma de cancelar a pilha antiga de alterações antes de colocar uma nova pilha ...
Estou escrevendo esta consulta no tempo passado porque já encontrei uma solução alternativa para esse problema adicionando um filtro de eventos com olhos de falcão na função de reprodução. no entanto, ainda estou curioso para saber se o cancelamento do evento é possível, porque tenho a sensação de que esse conhecimento será útil no futuro. obrigado por qualquer ajuda prestada :)
fonte
Respostas:
ou
O
target
é o objeto original no qualperformSelector:afterDelay:
foi chamado.Por exemplo:
Veja a documentação da apple , está bem no final da
performSelector:withObject:afterDelay:
descrição.fonte
Para cancelar todas as solicitações de execução anteriores, você pode usar:
fonte
Se você estiver procurando por "performSelector" para ter sua correspondência "
cancelPreviousPerformSelector
" ... não tem. (Ugh, Apple, por que você faz isso comigo ???)Os, er, ah, métodos de "correspondência" são:
(Apenas para torná-lo ainda mais difícil de lembrar, sem pesquisar os documentos.)
fonte
Verifique os documentos NSRunLoop. Você quer
-cancelPerformSelectorsWithTarget:
fonte