Javaでは、を使用して現在のスレッドの実行を一定時間中断できますThread.sleep()
。Objective-Cにこのようなものはありますか?
6 に答える
はい、+ [NSThread sleepForTimeInterval:]があります
(将来の質問のために知っているように、Objective-Cは言語そのものです。オブジェクトのライブラリ(少なくともそのうちの1つ)はCocoaです。)
Javaで1 秒間スリープする:
Thread.sleep(1000);
Objective Cで1 秒間スリープする:
[NSThread sleepForTimeInterval:1.0f];
なんで寝てるの?スリープすると、UI がブロックされ、他のスレッドにないバックグラウンド URL の読み込みもブロックされます (NSURL 非同期メソッドを使用すると、現在のスレッドで引き続き動作します)。
おそらく、実際に必要なのは performSelector:withObject:AfterDelay です。これは、後で所定の間隔でメソッドを呼び出すために使用できる NSObject のメソッドです。後で実行される呼び出しをスケジュールしますが、スレッドが処理する他のすべてのもの (UI やデータの読み込みなど) はまだ続けます。
もちろん、標準のUnix sleep()およびusleep()呼び出しを使用することもできます。(ただし、Cocoaを作成する場合は、[NSThread sleepForTimeInterval:]を使用します。)
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];
}
}
usleep() は、これを使用して現在のスレッドを時々一時停止するためにも使用できます。