2011-11-14 10 views
10

Wykonuję wywołanie funkcji o nazwie scheduleTimerWithTimeInterval. Właśnie sprawdzam, czy przetwarzanie XML zostało zakończone, czy nie dla poszczególnych usług sieci Web i unieważniające zegar w metodzie didEndElement po uzyskaniu pomyślnej odpowiedzi.scheduleTimerWithTimeInterval vs performselector z opóĽnieniem z systemem iOS 5.0

timerForStopWebService = [NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(stopWS) userInfo:nil repeats:NO]; 

teraz mam problem z systemem iOS 5.0 i działa poprawnie w innych wersjach iOS. w iOS 5.0 funkcja stopWS call w dowolnym momencie, nawet jeśli ją unieważniam. daj mi znać, jeśli masz na to rozwiązanie.

i teraz wdrażam performselector z opóźnieniem i ustawiam zmienne boolowskie w stopWS, aby określić, czy przetwarzanie zostało zakończone, czy nie. Po prostu chcę wiedzieć, że jest jakaś zasadnicza różnica między tym? i czy to rozwiązanie działa na mój problem?

Jeśli istnieje inny sposób, proszę zasugeruj mi, dzięki.

+1

Nie rozumiem, czego szukasz. Czy chcesz wywołać metodę ZAWSZE? A może chcesz go unieważnić, aby nie była wywoływana? To nie jest jasne. – Oliver

+0

Po prostu chcę wiedzieć różnicę między zaplanowanym TimeremWithTimeInterval vs performselector z opóźnieniem w głębi, ponieważ mam problem z systemem iOS 5.0. –

+0

A czym jest ten problem? Mówisz o tym w swoim pytaniu, ale nie jest to jasne. – Oliver

Odpowiedz

21

Oto wasze różnice

performSelectorWithObjectAfterDelay

  • jak sama nazwa wskazuje, wykonuje selektora po określonej liczbie sekund. RAZ.

  • Należy zwrócić uwagę na to, że należy anulować poprzednie żądania wykonania przed zwolnieniem obiektu, na którym selektor jest wykonywany. Do tego celu użyj metody cancelPerformSelector.

scheduledTimerWithTimeInterval

  • metoda ta daje możliwość, aby zadzwonić do selektora po określonym czasie zbyt ale ma również parametr [powtórzenia:], który pozwala nazwać ten sam wybierak wielokrotnie

  • Można również przekazywać wywołania, aby wywoływać selektory, które są szczególnie pomocne, gdy selektor potrzebuje wielu argumentów.

  • Musisz unieważnić timer, gdy nie jest już potrzebny. To powinno załatwić problem: [myTimer unieważnione]; myTimer = nil;

Jest to również najbardziej ostateczny wątek na NSTimer, proszę spojrzeć na to. How do I use NSTimer?

0

Możesz użyć performSelectorWithObjectAfterDelay, a następnie cancelPerformSelector, aby przerwać, jeśli nie jest już potrzebna. Myślę, że jest to łatwiejsze niż scheduledTimerWithTimeInterval, ponieważ nie trzeba przechowywać odwołania do licznika czasu. W większości przypadków te dwa podejścia powinny zachowywać się tak samo.

+0

Nie trzeba przechowywać odwołania do timera. Po dodaniu do pętli potrzebujesz tylko odniesienia, jeśli chcesz je anulować ... tak samo jak cancelPerformSelector. W przeciwnym razie można zrobić timer z jednym ostrzałem. – David

+0

Główna różnica polega na tym, że chcesz ją anulować, co wydawało się konieczne. W cancelPerformSelector potrzebujesz tylko odniesienia do obiektu, do którego zwykle masz dostęp w każdym razie (prawdopodobnie jest to po prostu self). Aby anulować timer, musisz przechowywać gdzieś timer, prawdopodobnie jako zmienną instancji. – zeroimpl

Powiązane problemy