2009-05-06 6 views

Odpowiedz

152

Tak, tam +[NSThread sleepForTimeInterval:]

(Tak wiesz dla przyszłych pytań, Objective-C jest sam język;. Bibliotekę obiektów (jedna z nich przynajmniej) jest Cocoa)

+6

thnx !
dla przyszłego odniesienia, definicja jest w rzeczywistości + [NSThread sleepForTimeInterval:] (tak, używane jak [NSThread sleepForTimeInterval: 0.1]). – TinkerTank

+0

To jest idealne. Dzięki! Właśnie skończyłem moje bloki animacji i działało jak czar. – RileyE

+0

Co powiesz na spanie na głównym termorze? – Dagon

7

Oczywiście , możesz również użyć standardowych wywołań funkcji sleep() i usleep(). (Jeśli piszę Cocoa, zostanę przy [NSThread sleepForTimeInterval:], jednak).

41

Dlaczego śpisz? Podczas snu blokujesz interfejs użytkownika, a także ładowanie adresu URL w tle nie w innych wątkach (korzystanie z metod asynchronicznych NSURL nadal działa w bieżącym wątku).

Istnieje duża szansa na wykonanie selektora: withObject: AfterDelay. Jest to metoda na NSObject, której możesz użyć do wywołania metody w pewnym uprzednio określonym odstępie czasu później - planuje ona wywołanie, które zostanie wykonane w późniejszym czasie, ale wszystkie inne rzeczy obsługiwane przez wątek (takie jak UI i ładunki danych) będą nadal kontynuować.

+38

Spanie jest przydatne dla mnie w celach testowych. Mogę zasymulować opóźnienia w sieci, aby upewnić się, że moja aplikacja reaguje poprawnie. Obecnie testuję na lokalnym serwerze sieciowym, więc wszystko jest w zasadzie natychmiastowe. – brantonb

+6

Uśpienie to niewłaściwy sposób na sprawdzenie opóźnień sieci. Popatrz na odpowiedź na to pytanie http://stackoverflow.com/questions/1502060/iphone-intermittent-network- testowanie, aby zobaczyć, jak przetestować zmienne prędkości sieci w symulatorze. Ponieważ zasypianie głównego wątku blokuje wszystko, w ogóle nie symulujesz opóźnienia sieci, ale więcej zawieszenia aplikacji. –

+0

Spanie jest przydatne do symulacji czynności wykonywanych w operacji łączenia na wątku JAVA. Śpisz przez 10 milis, sprawdź, czy wątek jest martwy, możesz go zwolnić. –

0

usleep() może być również używany jako ive używany to wstrzymanie bieżącego wątku czasami

5

Jeśli używasz NSThread sleepForTimeInterval (kod skomentował) spać, pobierania danych zostanie zablokowana, ale + [NSThread sleepForTimeInterval: ] (metoda checkLoad) nie będzie blokować pobierania danych.

Mój przykładowy kod jak poniżej:

- (void)viewDidAppear:(BOOL)animated 
{ 
//.... 
//show loader view 
[HUD showUIBlockingIndicatorWithText:@"Fetching JSON data"]; 
// while (_loans == nil || _loans.count == 0) 
// { 
//  [NSThread sleepForTimeInterval:1.0f]; 
//  [self reloadLoansFormApi]; 
//  NSLog(@"sleep "); 
// } 
[self performSelector:@selector(checkLoad) withObject:self afterDelay:1.0f]; 
} 

-(void) checkLoad 
{ 
    [self reloadLoansFormApi]; 
    if (_loans == nil || _loans.count == 0) 
    { 
     [self performSelector:@selector(checkLoad) withObject:self afterDelay:1.0f]; 
    } else 
    { 
     NSLog(@"size %d", _loans.count); 
     [self.tableView reloadData]; 
     //hide the loader view 
     [HUD hideUIBlockingIndicator]; 
    } 
} 
77

spania dla jednej sekundy w Javie:

Thread.sleep(1000); 

spania dla jednego drugiego w Objective C:

[NSThread sleepForTimeInterval:1.0f];