2010-06-16 10 views
6

Próbuję wykonać wielowątkowość w Objective C. Teraz chcę to zrobić, dla niektórych instancji obiektów, Chcę mieć sposób na wywołanie niektórych funkcja 5 sekund później. Jak mogę to zrobić?Jak zaplanować wywołanie metody w celu C

W Coco 2D bardzo łatwo jest to zrobić. Mają coś, co nazywa się harmonogramem. W celu C, jak to zrobić, proszę?

Dzięki

Odpowiedz

13

Można używać performSelector:withObject:afterDelay:

Na przykład:

[self performSelector:@selector(myFunc:) withObject:nil afterDelay:5.0]; 
+0

dzięki. również interesujące: + (void) cancelPreviousPerformRequestsWithTarget: (id) aTarget selektor: (SEL) aSelektor obiekt: (identyfikator) anArgument –

+0

Powyższy kod ma błąd, po: nie jest potrzebne wywołanie selektora dla metod bez argumentów. [self performSelector: @selector (myFunc) withObject: nil afterDelay: 5.0]; – archieoi

2

Dodając do tego, co zostało powiedziane, jeśli chcesz zdać jeden argument, aby myFunc połączenie można zmodyfikować w następujący sposób:

[self performSelector:@selector(showNote:) withObject:@"S" afterDelay:1.0]; 

i jeśli trzeba wywołać metodę, która trwa dłużej niż 1 argumentu, można to zrobić za pomocą wywołania, jak pokazano w poniższym przykładzie -

SEL selector = @selector(nextPicture:); 
NSMethodSignature *signature = [[self class] instanceMethodSignatureForSelector:selector]; 
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; 
[invocation setSelector:selector]; 

//Set the arguments 
[invocation setTarget:self]; 
NSString* str = [imageNames objectAtIndex:1]; 
[invocation setArgument:&str atIndex:2]; 
[NSTimer scheduledTimerWithTimeInterval:5.0f invocation:invocation repeats:NO]; 
+1

Zanim przejdziemy do 'NSInvocation', polecam użycie' dispatch_after'. Po prostu zacznij wpisywać go w Xcode i zaakceptuj autouzupełnianie, i wpisz kod, który ma być wykonany po opóźnieniu w bloku. – MaxGabriel

+0

dobra rekomendacja, dzięki! –

+0

dispatch_after było świetną rekomendacją, a właściwie czymś, o czym dotychczas nie wiedziałem. Jest to niezwykle przydatny fragment kodu, ponieważ znacznie ułatwia on wywoływanie metod, które przyjmują jeden lub więcej argumentów o wiele łatwiej (lub wiele metod z rzędu). Zasadniczo opóźnione wywołanie bloku jest nieskończenie bardziej użyteczne niż ograniczenie do pojedynczego selektora. – Corbin87