gpt4 book ai didi

iphone - NSIncationOperation 和主线程

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

假设我有一个 View ,其中某个 UIKit 对象作为其 subview (例如,UIActivityIndi​​catorView - 这并不重要)。该 View 还有一个名为 doSomething 的选择器,它以某种方式管理 UIKit 对象(在我们的示例中,它可以启动或停止指示器 View )。

我使用 initWithTarget:self selector:@selector(doSomething) object:nil 创建 NSInitationOperation (从 View 的代码部分)。然后将其添加到NSOperationQueue。一切正常。

怎么样?!它应该是一个新的线程和非线程安全的 UIKit 对象!为什么没有发现错误(并且没有发生崩溃)?

最佳答案

NSInitationOperation 类是 NSOperation 的具体子类,implements a non-concurrent operation

在非并发操作中,the operation’s task is performed synchronously ——也就是说,操作对象不会创建一个单独的线程来运行任务。因此,当调用非并发操作的 start 方法时,该操作会立即在当前线程中执行。当此类对象的 start 方法将控制权返回给调用者时,任务本身就已完成。

但是,使用 NSOperationQueue 会改变这种行为。 NSOperationQueue 总是并发执行操作;非并发操作需要一个单独的线程才能并发执行,而 NSOperationQueue 提供了这个线程。

这意味着,如果您直接执行 NSInitationOperation,您就能够以线程安全的方式访问您的 UIKit 对象(该操作将在同一线程上运行)。在您的情况下,如果使用 NSOperationQueue,您应该使用 NSObject 的 performSelectorOnMainThread:withObject:waitUntilDone: 来安排在主线程上使用 UIKit 对象的工作。来自您的调用选择器。

关于iphone - NSIncationOperation 和主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2846714/

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