gpt4 book ai didi

iphone - 这里的 "Run Loop"到底是什么?

转载 作者:行者123 更新时间:2023-12-03 21:24:37 25 4
gpt4 key购买 nike

在继续阅读文档之前,我的大脑陷入了这一点:

- (void)threadMainRoutine {
BOOL moreWorkToDo = YES;
BOOL exitNow = NO;

NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; // is this THE run loop?

// some stuff...

while (moreWorkToDo && !exitNow) { // or is THIS the run loop?
// some stuff

[runLoop runUntilDate:[NSDate date]];

// some stuff
}

// some stuff
}

我在代码示例中添加了一些注释。也许有人可以解释一下,如果有一个 runLoop 对象接收到 -runUntilDate: 消息,为什么会有一个 while 循环。我的意思是:这里的循环是谁?我看到两个。首先, while 显然是一个正在运行的循环,然后它调用了一个听起来像是在运行循环的方法。

stateConfused = YES;
pleaseExplain = YES;

最佳答案

从技术上讲,NSRunLoop 在内部循环(它循环“直到日期”)。这给了你一个定期退出线程的机会——如果你使用run而不是runUntilDate:,那么NSRunLoop将永远在内部循环(你不需要将其包装在 while 循环中,但您也永远无法停止它)。这是主线程的正常行为,而不是工作线程的正常行为,工作线程通常具有需要定期检查的退出条件。

runLoop 永远不会更改 moreWorkToDoexitNow 的值(当线程的工作完成或用户已退出您的应用程序),但您可以通过这些来决定是否希望线程终止。

根据您希望线程的行为方式,您可以将这些标志替换为 [NSApp isRunning][tasksRemainingForThisThreadToProcess count] != 0 或类似的标志。

(竞争条件警告:如果在处理完所有剩余任务后结束线程,请小心,当 tasksRemainingForThisThreadToProcess 为空时,切勿向线程发送另一个任务,因为这表明该线程将退出)。

关于iphone - 这里的 "Run Loop"到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1609583/

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