Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 什么';s相当于Java';Objective-C/Cocoa中的s Thread.sleep()?_Ios_Objective C_Cocoa Touch_Sleep - Fatal编程技术网

Ios 什么';s相当于Java';Objective-C/Cocoa中的s Thread.sleep()?

Ios 什么';s相当于Java';Objective-C/Cocoa中的s Thread.sleep()?,ios,objective-c,cocoa-touch,sleep,Ios,Objective C,Cocoa Touch,Sleep,在Java中,可以使用thread.sleep()将当前线程的执行暂停一段时间。Objective-C中有类似的内容吗?是的,有 (您知道,对于将来的问题,Objective-C是语言本身;对象库(至少有一个)是Cocoa。)当然,您也可以使用标准的Unix sleep()和usleep()调用。(如果写Cocoa,我会继续使用[NSThread sleepForTimeInterval:])为什么要睡觉?当您睡眠时,您正在阻止UI以及任何不在其他线程中加载的后台URL(使用NSURL异步方法仍

在Java中,可以使用
thread.sleep()
将当前线程的执行暂停一段时间。Objective-C中有类似的内容吗?

是的,有


(您知道,对于将来的问题,Objective-C是语言本身;对象库(至少有一个)是Cocoa。)

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

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


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

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

如果使用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];
    }
}

在Java中睡眠一秒钟:

Thread.sleep(1000);

在目标C中睡眠一秒钟:

[NSThread sleepForTimeInterval:1.0f];

睡眠对于我测试来说是很有用的。我可以模拟一些网络延迟,以确保我的应用程序正确响应。目前我正在测试一个本地的web服务器,所以一切基本上都是即时的。睡眠是测试网络延迟的错误方法。查看此问题的答案,了解如何在模拟器中测试网络的可变速度。因为休眠主线程会阻塞一切,所以你根本不是在模拟网络延迟,而是在模拟应用程序的暂停。休眠对于模拟JAVA线程上的连接操作非常有用。如果你睡眠10毫秒,检查线程是否死机,然后你可以解除锁定它。如果你睡眠任何一段时间,你的线程将完全处于睡眠前的状态。这不是一个好的测试,因为在现实世界中,您的应用程序将处于处理状态,而不是休眠状态。这就是为什么弄清楚如何在不依赖睡眠的情况下进行测试是很重要的。+1感谢您指出了另一种解决方案!正是我想要的:)Thnx
为了便于将来参考,该定义实际上是+[NSThread sleepForTimeInterval:](因此,与[NSThread sleepForTimeInterval:0.1]类似使用)。这非常完美。谢谢我刚完成了我的动画块,它就像一个魔咒。睡在主therad上怎么样?它是一样的;主线程只是一个线程。但是,在主线程上睡眠通常是一个坏主意,因为它会使程序无响应。对于那些想知道,[NSThread sleepForTimeInteval:]与[[NSThread currentThread]sleepForTimeInteval:]相同的人来说。