Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Cocoa 运行NSRunLoop会导致主线程挂起_Cocoa_Freeze_Nsrunloop - Fatal编程技术网

Cocoa 运行NSRunLoop会导致主线程挂起

Cocoa 运行NSRunLoop会导致主线程挂起,cocoa,freeze,nsrunloop,Cocoa,Freeze,Nsrunloop,在Cocoa应用程序中,运行如下代码: NSDate* date = [NSDate dateWithTimeIntervalSinceNow:30.0]; while (date.timeIntervalSinceNow > 0) { [NSRunLoop.currentRunLoop runMode:NSDefaultRunLoopMode beforeDate:date]; } 在主线程上,会导致主线程挂起30秒。我觉得这很令人惊讶,因为我认为代码基本上是一个消息泵,允许用

在Cocoa应用程序中,运行如下代码:

NSDate* date = [NSDate dateWithTimeIntervalSinceNow:30.0];
while (date.timeIntervalSinceNow > 0) {
    [NSRunLoop.currentRunLoop runMode:NSDefaultRunLoopMode beforeDate:date];
}
在主线程上,会导致主线程挂起30秒。我觉得这很令人惊讶,因为我认为代码基本上是一个消息泵,允许用户界面事件被实际处理。
人们可以提供什么解释来解释为什么这会导致主线程挂起?

主Cocoa应用程序事件循环构建在运行循环之上,但它不仅仅是运行循环输入源

如果需要消息泵,应使用
-nexteventmachingmask:…
-sendEvent:
应用程序的
方法或
NSWindow


但是,你真正想要实现的是什么?为什么要尝试运行事件循环30秒?你能用定时器或
dispatch\u after()
实现你想要的吗?

实际上需要使程序挂起一段时间,有人使用run循环完成了这一点。我对他们是如何做到这一点感到困惑,因为我认为运行循环实际上会阻止应用程序挂起。