Jawaban:
Ya, ada + [NSThread sleepForTimeInterval:]
(Asal Anda tahu untuk pertanyaan mendatang, Objective-C adalah bahasa itu sendiri; perpustakaan objek (setidaknya salah satunya) adalah Cocoa.)
Tidur selama satu detik di Jawa:
Thread.sleep(1000);
Tidur selama satu detik di Tujuan C:
[NSThread sleepForTimeInterval:1.0f];
Kenapa kamu tidur Saat tidur, Anda memblokir UI dan juga URL latar belakang yang tidak dimuat di thread lain (menggunakan metode asinkron NSURL masih beroperasi di thread saat ini).
Kemungkinan yang Anda inginkan adalah performSelector: withObject: AfterDelay. Itu adalah metode di NSObject yang dapat Anda gunakan untuk memanggil metode pada interval yang ditentukan sebelumnya nanti - ini menjadwalkan panggilan yang akan dilakukan di lain waktu, tetapi semua hal lain yang ditangani thread (seperti UI dan pemuatan data) akan masih berlanjut.
Tentu saja, Anda juga dapat menggunakan panggilan Unix sleep () dan usleep () standar. (Jika menulis Cocoa, saya akan tetap menggunakan [NSThread sleepForTimeInterval:], bagaimanapun.)
Jika Anda menggunakan NSThread sleepForTimeInterval (kode komentar) untuk tidur, pengambilan data akan diblokir, tetapi + [NSThread sleepForTimeInterval:] (metode checkLoad) tidak akan memblokir pengambilan data.
Kode contoh saya seperti di bawah ini:
- (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];
}
}