gpt4 book ai didi

cocoa - 关于 Cocoa 中线程和运行循环的澄清

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

我正在尝试了解线程,但我完全感到困惑。我确信所有答案都在苹果文档中,但我发现它真的很难分解和消化。也许有人可以帮我解决一两件事。

1)在主线程上执行Selector

上面是否只是在主运行循环中注册了一个事件,或者它是否以某种方式成为一个新线程,即使该方法说“mainThread”?如果线程的目的是减轻主线程上的处理,这有什么帮助?

2) 运行循环

如果我想创建一个完全独立的线程,我真的可以使用 “分离新线程选择器”?在此调用 start 是否会为已创建的线程启动默认运行循环?如果是这样,运行循环在哪里出现?

3) 最后,我看到了使用 NSOperationQueue 的示例。如果您使用performSelectorOnMainThread,线程无论如何都在队列中,因此不需要NSOperation,这是真的吗?

4)我应该忘记所有这些并只使用 Grand Central Dispatch 吗?

最佳答案

运行循环

您可以将运行循环视为与线程关联的事件处理 for 循环。这是系统为每个线程提供的,但它仅针对主线程自动运行。

请注意,运行运行循环和执行线程是两个不同的概念。当您只是执行长时间计算并且不必响应各种事件时,您可以执行线程而不运行运行循环。如果您想响应来自辅助线程的各种事件,您可以通过

检索与该线程关联的运行循环
[NSRunLoop currentRunLoop]

并运行它。运行循环可以处理的事件称为输入源。您可以将输入源添加到运行循环。

执行选择器

performSelectorOnMainThread:将目标和选择器添加到名为performSelector 输入源的特殊输入源。主线程的运行循环使输入源出队并一一处理方法调用,作为其事件处理循环的一部分。

NSOperation/NSOperationQueue

我想到NSOperation作为在应用程序内显式声明各种任务的一种方式,这需要一些时间,但基本上可以独立运行。它比自己分离新线程并自己维护各种东西更容易使用。主NSOperationQueue自动维护一组可重用的后台线程,并运行 NSOperations在平行下。所以是的,如果您只需要在主线程中对操作进行排队,您可以取消 NSOperationQueue只需使用 performSelectorOnMainThread: ,但这不是 NSOperation 的要点.

GCD

GCD 是 Snow Leopard 中引入的新基础设施。 NSOperationQueue现在是在它的基础上实现的。它在功能/ block 级别上工作。将 block 喂给dispatch_async非常方便,但对于较大的操作 block ,我更喜欢使用 NSOperation ,特别是当该 block 在应用程序的各个位置使用时。

摘要

您需要阅读Official Apple Doc !关于这一点也有许多内容丰富的博客文章。

关于cocoa - 关于 Cocoa 中线程和运行循环的澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2789357/

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