120

Javaでは、を使用して現在のスレッドの実行を一定時間中断できますThread.sleep()。Objective-Cにこのようなものはありますか?

4

6 に答える 6

164

はい、+ [NSThread sleepForTimeInterval:]があります

(将来の質問のために知っているように、Objective-Cは言語そのものです。オブジェクトのライブラリ(少なくともそのうちの1つ)はCocoaです。)

于 2009-05-06T13:07:35.387 に答える
108

Javaで1 秒間スリープする:

Thread.sleep(1000);

Objective Cで1 秒間スリープする:

[NSThread sleepForTimeInterval:1.0f];
于 2013-05-29T20:24:59.113 に答える
40

なんで寝てるの?スリープすると、UI がブロックされ、他のスレッドにないバックグラウンド URL の読み込みもブロックされます (NSURL 非同期メソッドを使用すると、現在のスレッドで引き続き動作します)。

おそらく、実際に必要なのは performSelector:withObject:AfterDelay です。これは、後で所定の間隔でメソッドを呼び出すために使用できる NSObject のメソッドです。後で実行される呼び出しをスケジュールしますが、スレッドが処理する他のすべてのもの (UI やデータの読み込みなど) はまだ続けます。

于 2009-05-06T18:55:05.863 に答える
9

もちろん、標準のUnix sleep()およびusleep()呼び出しを使用することもできます。(ただし、Cocoaを作成する場合は、[NSThread sleepForTimeInterval:]を使用します。)

于 2009-05-06T14:27:41.047 に答える
6

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];
    }
}
于 2013-03-25T08:28:53.863 に答える
0

usleep() は、これを使用して現在のスレッドを時々一時停止するためにも使用できます。

于 2013-01-24T00:48:28.743 に答える