Risposte:
Sì, c'è + [NSThread sleepForTimeInterval:]
(Solo così sai per domande future, Objective-C è il linguaggio stesso; la libreria di oggetti (uno di questi almeno) è Cocoa.)
Dormire per un secondo in Java:
Thread.sleep(1000);
Dormire per un secondo nell'Obiettivo C:
[NSThread sleepForTimeInterval:1.0f];
Perché stai dormendo? Quando dormi, stai bloccando l'interfaccia utente e anche il caricamento di qualsiasi URL in background non in altri thread (l'uso dei metodi asincroni NSURL funziona ancora sul thread corrente).
È probabile che ciò che vuoi veramente sia performSelector: withObject: AfterDelay. Questo è un metodo su NSObject che puoi utilizzare per chiamare un metodo in un intervallo predeterminato in un secondo momento: pianifica una chiamata che verrà eseguita in un secondo momento, ma tutte le altre cose gestite dal thread (come l'interfaccia utente e i caricamenti dei dati) lo faranno continuare ancora.
Ovviamente, potresti anche usare le chiamate standard Unix sleep () e usleep (). (Se scrivessi Cocoa, rimarrei con [NSThread sleepForTimeInterval:], tuttavia.)
Se usi NSThread sleepForTimeInterval (codice commentato) per dormire, il recupero dei dati verrà bloccato, ma + [NSThread sleepForTimeInterval:] (metodo checkLoad) non bloccherà il recupero dei dati.
Il mio codice di esempio come di seguito:
- (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];
}
}