回答:
はい、+ [NSThread sleepForTimeInterval:]があります
(あなたが将来の質問のために知っているように、Objective-Cは言語そのものです;オブジェクトのライブラリ(少なくともそれらの1つ)はCocoaです。)
Java で1秒間眠る:
Thread.sleep(1000);
目的C で1秒間眠る:
[NSThread sleepForTimeInterval:1.0f];
なんで寝てるの?眠っているときは、UIと他のスレッドにないバックグラウンドURLの読み込みをブロックしています(NSURL非同期メソッドを使用すると、現在のスレッドで引き続き動作します)。
おそらくあなたが本当に望んでいるのは、performSelector:withObject:AfterDelayです。これは、後で所定の間隔でメソッドを呼び出すために使用できるNSObjectのメソッドです-後で実行される呼び出しをスケジュールしますが、スレッドが処理する他のすべてのもの(UIやデータのロードなど)はまだ続きます。
NSThread sleepForTimeInterval(コメント付きコード)を使用してスリープする場合、データのフェッチはブロックされますが、+ [NSThread sleepForTimeInterval:](checkLoadメソッド)はデータのフェッチをブロックしません。
以下の私のコード例:
- (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];
}
}