Jak korzystać z NSTimer
? Czy ktoś może dać mi instrukcje krok po kroku?
objective-c
cocoa
nstimer
lab12
źródło
źródło
Odpowiedzi:
Po pierwsze chciałbym zwrócić uwagę na dokumentację Cocoa / CF (która zawsze jest świetnym pierwszym punktem kontaktowym). Dokumenty Apple mają sekcję u góry każdego artykułu zatytułowanego „Przewodniki towarzyszące”, w której znajdują się przewodniki dotyczące dokumentowanego tematu (jeśli takie istnieją). Na przykład, z
NSTimer
, dokumentacja zawiera dwie przewodników towarzyszących:W tej sytuacji najbardziej przydatne będzie artykuł dotyczący programowania czasowego, podczas gdy tematy wątków są powiązane, ale nie najbardziej bezpośrednio związane z dokumentowaną klasą. Jeśli spojrzysz na artykuł Tematy programowania czasowego, jest on podzielony na dwie części:
W przypadku artykułów, które przyjmują ten format, często znajduje się przegląd klasy i jej zastosowania, a następnie przykładowy kod, jak go używać, w tym przypadku w sekcji „Korzystanie z timerów”. Istnieją sekcje na temat „Tworzenie i planowanie timera”, „Zatrzymywanie timera” i „Zarządzanie pamięcią”. Z artykułu, tworzenie zaplanowanego, niepowtarzalnego timera można zrobić w następujący sposób:
Spowoduje to utworzenie licznika, który jest uruchamiany po 2,0 sekundach i wywołuje
targetMethod:
sięself
z jednym argumentem, który jest wskaźnikiem doNSTimer
instancji.Jeśli chcesz przyjrzeć się bardziej szczegółowo metodzie, możesz odwołać się do dokumentacji, aby uzyskać więcej informacji, ale kod zawiera również wyjaśnienia.
Jeśli chcesz zatrzymać licznik czasu, który się powtarza (lub zatrzymać niepowtarzalny licznik czasu przed jego uruchomieniem), musisz zachować wskaźnik do utworzonej
NSTimer
instancji; często musi to być zmienna instancji, aby można było odwoływać się do niej w innej metodzie. Następnie można nazwaćinvalidate
naNSTimer
przykład:Dobrą praktyką jest także
nil
wykluczanie zmiennej instancji (na przykład, jeśli twoja metoda unieważniająca licznik czasu jest wywoływana więcej niż jeden raz, a zmienna instancji nie została ustawiona,nil
aNSTimer
instancja została cofnięta, spowoduje to wyjątek).Zwróć też uwagę na punkt dotyczący zarządzania pamięcią na dole tego artykułu:
źródło
YES
dorepeats:
kiedy dzwoniszscheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
. Jeśli to zrobisz, pamiętaj, aby zachować odwołanie doNSTimer
instancji (jest zwracane przez metodę) i postępuj zgodnie z punktem Zarządzania pamięcią, jak opisano powyżej.target
iselector
. Na przykład, jeśli twoim celem jest,self
a selektorem jesttimerMethod:
, metoda wywoływana podczas odpalania timera jesttimerMethod:
zdefiniowana naself
. Następnie możesz wstawić dowolny kod do tej metody, a metoda będzie wywoływana przy każdym uruchomieniu timera. Zauważ, że metoda wywoływana podczas uruchamiania timera (którą podajesz jakoselector:
) może przyjąć tylko jeden argument (który po wywołaniu jest wskaźnikiem doNSTimer
instancji).self
”istnieje kilka sposobów korzystania z timera:
1) Zaplanowany timer i użycie selektora
Na marginesie, zamiast używać timera, który się nie powtarza i wywołuje selektor po określonym czasie, możesz użyć prostej instrukcji takiej jak ta:
będzie to miało taki sam efekt jak powyższy przykładowy kod; ale jeśli chcesz wywoływać selektor co n-ty raz, używasz timera z powtórzeniami: TAK;
2) samowyzwalacz czasowy
3) nieplanowany zegar i użycie wywołania
a następnie ręcznie uruchamiasz stoper, gdy potrzebujesz:
Uwaga: metoda onTick: wygląda następująco:
źródło
Coś takiego:
źródło
źródło
MyViewController
nigdy nie zostaje zwolniony.źródło
W odpowiedziach brakuje określonego timera dnia tutaj jest na następną godzinę:
Oczywiście zamień „doRefresh” na pożądaną przez klasę metodę
spróbuj raz utworzyć obiekt kalendarza i uczyń allUnits statycznym dla zwiększenia wydajności.
dodanie komponentu godzinnego działa dobrze, nie ma potrzeby testu północy ( link )
źródło