什么是Objective-C / Cocoa中Java的Thread.sleep()的等价物?

时间:2009-05-06 13:03:33

标签: iphone objective-c cocoa-touch sleep

在Java中,您可以使用Thread.sleep()暂停当前线程的执行一段时间。在Objective C中有这样的东西吗?

6 个答案:

答案 0 :(得分:155)

是的,有+[NSThread sleepForTimeInterval:]

(正如你所知,对于未来的问题,Objective-C是语言本身;对象库(至少其中一个)是Cocoa。)

答案 1 :(得分:85)

在Java中睡觉一秒

Thread.sleep(1000);

在目标C中睡觉一秒

[NSThread sleepForTimeInterval:1.0f];

答案 2 :(得分:40)

你为什么睡觉?当您睡眠时,您正在阻止UI以及任何不在其他线程中加载的后台URL(使用NSURL异步方法仍在当前线程上运行)。

你真正想要的是performSelector:withObject:AfterDelay。这是NSObject上的一个方法,您可以使用它在某个预定的时间间隔之后调用一个方法 - 它会调度稍后将执行的调用,但是线程处理的所有其他内容(如UI和数据加载)将还在继续。

答案 3 :(得分:7)

当然,您也可以使用标准的Unix sleep()和usleep()调用。 (如果编写Cocoa,我会继续使用[NSThread sleepForTimeInterval:]。)

答案 4 :(得分:5)

如果使用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];
    }
}

答案 5 :(得分:0)

也可以使用

usleep(),因为我已经用它来暂停当前线程