在Objective-C / Cocoa中Java的Thread.sleep()相当于什么?

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

是的,有+ [NSThread sleepForTimeInterval:]

(只要你知道将来的问题,Objective C就是语言本身;对象库(至less其中之一)是Cocoa。)

在Java中睡一秒钟

Thread.sleep(1000); 

目标C睡一秒钟

 [NSThread sleepForTimeInterval:1.0f]; 

你为什么睡觉? 当你睡觉的时候,你正在阻塞UI,并且任何后台URL都不会加载到其他线程中(使用NSURLasynchronous方法仍然在当前线程上运行)。

机会是你真正想要的是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()也可以被用来作为一个使用它来暂停当前线程的时间