Como uso um NSTimer
? Alguém pode me dar instruções passo a passo?
objective-c
cocoa
nstimer
lab12
fonte
fonte
Respostas:
Em primeiro lugar, gostaria de chamar sua atenção para a documentação do Cocoa / CF (que é sempre um excelente primeiro ponto de escala). Os documentos da Apple têm uma seção na parte superior de cada artigo de referência chamada "Guias complementares", que lista os guias para o tópico que está sendo documentado (se houver algum). Por exemplo, com
NSTimer
, a documentação lista dois guias complementares:Para sua situação, o artigo Tópicos de programação do timer provavelmente será o mais útil, enquanto os tópicos de encadeamento estão relacionados, mas não os mais diretamente relacionados à classe que está sendo documentada. Se você der uma olhada no artigo Tópicos de programação do timer, ele está dividido em duas partes:
Para artigos que usam esse formato, geralmente há uma visão geral da classe e para que ela é usada e, em seguida, alguns exemplos de código de como usá-la, neste caso na seção "Usando temporizadores". Existem seções em "Criando e agendando um timer", "Parando um timer" e "Gerenciamento de memória". A partir do artigo, a criação de um cronômetro agendado e sem repetição pode ser feita da seguinte maneira:
Isto irá criar um temporizador que é acionado após 2,0 segundos e chama
targetMethod:
aself
com um argumento, que é um ponteiro para aNSTimer
instância.Se você quiser examinar mais detalhadamente o método, consulte os documentos para obter mais informações, mas também há explicações sobre o código.
Se você deseja interromper um cronômetro que seja repetido (ou interromper um cronômetro que não se repita antes que ele seja acionado), será necessário manter um ponteiro para a
NSTimer
instância que foi criada; frequentemente, isso precisará ser uma variável de instância para que você possa se referir a ela em outro método. Você pode chamarinvalidate
aNSTimer
instância:Também é uma boa prática
nil
extrair a variável da instância (por exemplo, se o método que invalida o timer for chamado mais de uma vez e a variável da instância não tiver sido definidanil
e aNSTimer
instância tiver sido desalocada, será lançada uma exceção).Observe também o ponto sobre Gerenciamento de memória na parte inferior do artigo:
fonte
YES
pararepeats:
quando você chamarscheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
. Se você fizer isso, mantenha uma referência àNSTimer
instância (ela é retornada pelo método) e siga o ponto em Gerenciamento de memória, conforme detalhado acima.target
eselector
. Por exemplo, se o seu destino éself
e o seletor étimerMethod:
, o método chamado quando o timer é acionado étimerMethod:
definido noself
. Você pode colocar o código que desejar nesse método, e o método será chamado sempre que o timer for acionado. Observe que o método chamado quando o timer é acionado (que você transmite comoselector:
) pode receber apenas um argumento (que quando chamado é um ponteiro para aNSTimer
instância).self
"existem algumas maneiras de usar um timer:
1) cronômetro programado e usando o seletor
Como uma observação lateral, em vez de usar um timer que não se repita e chama o seletor após um intervalo especificado, você pode usar uma declaração simples como esta:
isso terá o mesmo efeito que o código de exemplo acima; mas se você quiser chamar o seletor pela enésima vez, use o temporizador com repetições: YES;
2) temporizador auto-agendado
3) cronômetro não programado e usando invocação
e depois disso, você inicia o timer manualmente sempre que precisar:
E, como observação, o método onTick: se parece com o seguinte:
fonte
Algo assim:
fonte
fonte
MyViewController
nunca seja desalocado.fonte
As respostas estão faltando uma hora específica do dia aqui na próxima hora:
Obviamente, substitua "doRefresh" pelo método desejado da sua classe
tente criar o objeto de calendário uma vez e torne allUnits uma estática para obter eficiência.
adicionar um componente de uma hora funciona perfeitamente, sem necessidade de um teste à meia-noite ( link )
fonte