Antworten:
Ja, es gibt + [NSThread sleepForTimeInterval:]
(Damit Sie für zukünftige Fragen wissen, ist Objective-C die Sprache selbst; die Objektbibliothek (mindestens eine davon) ist Cocoa.)
Eine Sekunde in Java schlafen :
Thread.sleep(1000);
Eine Sekunde schlafen in Ziel C:
[NSThread sleepForTimeInterval:1.0f];
Warum schläfst du? Wenn Sie in den Ruhezustand wechseln, blockieren Sie die Benutzeroberfläche und alle Hintergrund-URLs, die nicht in anderen Threads geladen werden (die Verwendung der asynchronen NSURL-Methoden funktioniert weiterhin für den aktuellen Thread).
Wahrscheinlich möchten Sie performSelector: withObject: AfterDelay. Dies ist eine Methode in NSObject, mit der Sie eine Methode in einem festgelegten Intervall später aufrufen können. Sie plant einen Aufruf, der zu einem späteren Zeitpunkt ausgeführt wird, aber alle anderen Dinge, die der Thread behandelt (wie Benutzeroberfläche und Datenladen) immer noch weitermachen.
Natürlich können Sie auch die Standardaufrufe für Unix sleep () und usleep () verwenden. (Wenn ich Cocoa schreibe, bleibe ich jedoch beim [NSThread sleepForTimeInterval:].)
Wenn Sie NSThread sleepForTimeInterval (kommentierter Code) zum Ruhezustand verwenden, wird das Abrufen von Daten blockiert, aber + [NSThread sleepForTimeInterval:] (checkLoad-Methode) blockiert das Abrufen von Daten nicht.
Mein Beispielcode wie folgt:
- (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];
}
}