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

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

99475 次浏览

是的,有 + [ NSThread sleep ForTimeInterval: ]

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

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

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

您真正需要的可能是 PerformSelector: withObject: AfterDellate。这是一个在 NSObject 上的方法,你可以用它在一些预先确定的时间间隔后调用一个方法——它调度一个将在稍后时间执行的调用,但是线程处理的所有其他事情(如 UI 和数据加载)仍将继续。

Ussleep ()也可以用作 live 使用它来暂停当前线程

如果使用 NSThread sleep ForTimeInterval (注释代码)进行休眠,那么获取数据将被阻塞,但是 + [ NSThread sleep ForTimeInterval: ](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];
}
}

在 Java 中为 等一下而睡眠:

Thread.sleep(1000);

等一下睡觉目标 C:

[NSThread sleepForTimeInterval:1.0f];