답변:
예, + [NSThread sleepForTimeInterval :]이 있습니다.
(향후 질문에 대해 알다시피 Objective-C는 언어 자체입니다. 객체 라이브러리 (적어도 그중 하나)는 Cocoa입니다.)
자고 일초 자바 :
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];
}
}