Yanıtlar:
Evet, + [NSThread sleepForTimeInterval:] var
(Gelecekteki sorular için bildiğiniz gibi, Objective-C dilin kendisidir; nesnelerin kütüphanesi (en azından bunlardan biri) Cocoa'dır.)
Java'da bir saniye uyumak :
Thread.sleep(1000);
Hedef C'de bir saniye uyumak :
[NSThread sleepForTimeInterval:1.0f];
Neden uyuyorsun? Uyuduğunuzda, kullanıcı arayüzünü ve diğer iş parçacıklarında olmayan arka plan URL'lerini engelliyorsunuz (NSURL zaman uyumsuz yöntemlerini kullanarak, geçerli iş parçacığı üzerinde hala çalışıyor).
Muhtemelen gerçekten istediğiniz şey performSelector: withObject: AfterDelay. Bu, NSObject'te daha sonra önceden belirlenmiş bir aralıkta bir yöntemi çağırmak için kullanabileceğiniz bir yöntemdir - daha sonra gerçekleştirilecek bir çağrıyı planlar, ancak iş parçacığının işlediği diğer tüm şeyler (UI ve veri yüklemeleri gibi) hala devam ediyor.
Elbette standart Unix sleep () ve usleep () çağrılarını da kullanabilirsiniz. (Kakao yazarsam, ancak [NSThread sleepForTimeInterval:] ile kalırdım.)
Uyku için NSThread sleepForTimeInterval (açıklamalı kod) kullanırsanız, veri getirme engellenir, ancak + [NSThread sleepForTimeInterval:] (checkLoad yöntemi) veri getirmeyi engellemez.
Örnek kodum aşağıdaki gibidir:
- (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];
}
}