首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSInvocationOperation和主线程

NSInvocationOperation和主线程
EN

Stack Overflow用户
提问于 2010-05-17 12:44:04
回答 1查看 3.7K关注 0票数 2

假设我有一个视图,其中包含一些UIKit对象作为其子视图(例如,UIActivityIndicatorView -这无关紧要)。这个视图还有一个选择器,称为doSomething,它以某种方式管理UIKit对象(在我们的示例中,它可以启动或停止指示器视图)。

我用initWithTarget:self selector:@selector(doSomething) object:nil创建NSInvocationOperation (从视图的代码部分)。然后将其添加到NSOperationQueue。一切都很好。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-17 13:30:32

NSInvocationOperation类是NSOperation implements a non-concurrent operation的具体子类。

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

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

这意味着如果您直接执行NSInvocationOperation,您将能够以线程安全的方式访问UIKit对象(该操作将在同一线程上运行)。在您的示例中,如果使用NSOperationQueue,则应该从调用选择器使用NSObject的performSelectorOnMainThread:withObject:waitUntilDone:来调度在主线程上使用NSObject对象的工作。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2846714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档