जवाबों:
हां, वहां + [NSThread sleepForTimeInterval:] है
(बस इसलिए कि आप भविष्य के प्रश्नों के लिए जानते हैं, ऑब्जेक्टिव-सी भाषा ही है; वस्तुओं की लाइब्रेरी (उनमें से कम से कम एक समोआ है।)
जावा में एक सेकंड के लिए सोना :
Thread.sleep(1000);
उद्देश्य सी में एक सेकंड के लिए सो रहा है:
[NSThread sleepForTimeInterval:1.0f];
तुम क्यों सो रहे हो? जब आप सोते हैं, तो आप UI और किसी भी पृष्ठभूमि URL को अन्य थ्रेड्स में लोड नहीं कर रहे हैं (NSURL अतुल्यकालिक विधियों का उपयोग करके अभी भी चालू थ्रेड पर काम करता है)।
संभावना है कि आप वास्तव में क्या चाहते हैं, प्रदर्शनकर्ता है: 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];
}
}