Pergunta

Eu estou usando o seguinte código para executar um seletor depois de um atraso com vários parâmetros passados:

http://nifty-box.com/blog /2006/12/nsinvocation-cleans-code.html

Ele funciona muito bem, mas eu preciso estender isso para apoiar o equivalente a:

[NSObject cancelPreviousPerformRequestsWithTarget: self]

(alvo, neste caso, não seria eu, mas seria uma instância de _UFLatePerformer eu acredito)

Existe alguma maneira de fazer isso, então deallocation do meu ponto de vista pode matar todos os pedidos de desempenho atrasadas restantes?

Foi útil?

Solução

No Mac, você seria capaz de usar objc_setAssociatedObject, mas que não existe no iPhone.

Então, basicamente você precisa de algum tipo de gerente de singleton que se agarra estas referências para você que você passar em um NSObject e ele faz o que quiser.

Quando eu estava fazendo algo que eu semelhante escreveu uma única classe que teve em pedidos para executar uma ação, e começou um temporizador que disparou quando a ação era para ser feito - na época minha classe treinador decidiu se o pedido em questão foi ainda é válido, e se assim for demitido da ação. Eu poderia, assim, efetivamente cancelar um temporizador, e, além disso, poderia dizer o gerente para repor o temporizador que não fez realmente, ele apenas fez um novo temporizador, mas quando o temporizador velho disparou a ação foi solicitada para realizar era inválido.

Então, basicamente, o temporizador foi chamando a volta singleton com apenas um ID do pedido, o que levou a uma entrada de dicionário que contém detalhes da chamada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top