120

在 Java 中,您可以使用Thread.sleep(). Objective-C中有这样的东西吗?

4

6 回答 6

164

是的,有+[NSThread sleepForTimeInterval:]

(只是为了让你知道未来的问题,Objective-C 是语言本身;对象库(至少其中一个)是 Cocoa。)

于 2009-05-06T13:07:35.387 回答
108

在 Java 中休眠一秒钟:

Thread.sleep(1000);

在 Objective C 中休眠一秒钟:

[NSThread sleepForTimeInterval:1.0f];
于 2013-05-29T20:24:59.113 回答
40

你为什么睡觉?当你睡觉时,你会阻塞 UI 以及任何不在其他线程中的后台 URL 加载(使用 NSURL 异步方法仍然在当前线程上运行)。

您真正想要的是 performSelector:withObject:AfterDelay。这是 NSObject 上的一个方法,您可以使用它稍后在某个预定时间间隔调用一个方法 - 它安排将在稍后执行的调用,但线程处理的所有其他内容(如 UI 和数据加载)将仍然继续。

于 2009-05-06T18:55:05.863 回答
9

当然,您也可以使用标准的 Unix sleep() 和 usleep() 调用。(但是,如果编写 Cocoa,我会使用 [NSThread sleepForTimeInterval:]。)

于 2009-05-06T14:27:41.047 回答
6

如果使用 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];
    }
}
于 2013-03-25T08:28:53.863 回答
0

usleep() 也可以用作我使用它来暂停当前线程的时候

于 2013-01-24T00:48:28.743 回答