Answers:
是的,有+ [NSThread sleepForTimeInterval:]
(因此,对于将来的问题,您知道,Objective-C是语言本身;对象库(至少是其中一个)是Cocoa。)
在Java中睡眠一秒钟:
Thread.sleep(1000);
在目标C中睡一秒钟:
[NSThread sleepForTimeInterval:1.0f];
你怎么睡觉了 睡眠时,您将阻止UI,并且所有后台URL都将不在其他线程中加载(使用NSURL异步方法仍可在当前线程上运行)。
您真正想要的是performSelector:withObject:AfterDelay。那是NSObject上的一种方法,您可以使用它在以后的某个预定时间间隔内调用该方法-它安排了将在以后执行的调用,但是线程处理的所有其他内容(如UI和数据加载)将仍在继续。
如果使用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];
}
}