在 Java 中,可以使用 Thread.sleep()暂停当前线程的执行一段时间。在 Objective-C 里有类似的东西吗?
Thread.sleep()
是的,有 + [ 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];