gpt4 book ai didi

objective-c - "[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]"是做什么的?

转载 作者:搜寻专家 更新时间:2023-10-30 20:05:13 29 4
gpt4 key购买 nike

我有一些关于 NSRunLoop 的问题。当运行如下代码时,主线程似乎停止了,它不会在 while 循环之后运行代码。我想知道什么时候[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]执行后,主线程的运行循环中发生了什么?正如我们所知,UI mainthread'runloop 在应用程序启动时自动运行,主线程是休眠还是死循环?

while (!self.runLoopThreadDidFinishFlag) {
NSLog(@"Begin RunLoop");

[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

NSLog(@"End RunLoop");
}

最佳答案

[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]

这行代码只是让线程执行一次循环的sources,如果没有任务,就立即返回。所以这些代码不会阻塞你的主线程。 Mainthread 的 runloop 自动运行意味着主线程保持一段时间循环执行 [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]一次又一次。当它碰到你自己的while圈时while (!self.runLoopThreadDidFinishFlag)状态可能始终为真,可能会阻塞线程。你自己的代码 [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]这里的意思是执行一次循环的源代码或在运行循环的源代码中清理任务,如果有一个任务更改self.runLoopThreadDidFinishFlag然后你的代码将继续。

所以 [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]在你的while circle让主线程有机会goto执行其他可能改变 runLoopThreadDidFinishFlag 的代码.

附言。 [NSRunLoop run]runMode:beforeDate: 非常不同你可能会感到困惑。 NSRunLoop apple document


编辑 20190606。main-runloop(主线程)中 while-loop 的示例代码。

你可以测试一下,如果“runMode:beforeDate:”函数被删除,while循环不能被“停止”按钮停止。所以这里的“runMode:beforeDate:”提供了一个机会在 out big-while-loop(main-runloop) 中运行其他代码。

- (IBAction)stopMyLoop:(id)sender {
self.runLoopThreadDidFinishFlag = YES;
NSLog(@"stopMyLoop");
}

- (IBAction)startMyLoop:(id)sender {
NSLog(@"startMyLoop");
self.runLoopThreadDidFinishFlag = NO;
while (!self.runLoopThreadDidFinishFlag) {
NSLog(@"Begin RunLoop");
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate date]];
NSLog(@"End RunLoop");
}
}

关于objective-c - "[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]"是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31199802/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com