NSOperationQueue mainQueue与performSelectorOnMainThread有何区别?

25

这两者有何不同:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    [self doSomthing:object];
}];
并且这个:
[self performSelectorOnMainThread:@selector(doSomething:) withObject:object waitUntilDone:NO]
1个回答

36
[self performSelectorOnMainThread:@selector(doSomething:) 
                       withObject:object 
                    waitUntilDone:NO]

在调用时会立即执行选择器。如果您想从后台线程影响UI,则必须使用此选项。如果将waitUntilDone设置为YES,它将阻止线程直到方法完成。

mainQueue 将该块添加到主线程的操作队列中,但不能保证何时执行。队列中可能还有其他项目等待执行。


非常清晰的解释;我想知道为什么楼主没有接受它作为答案。您能否提供两种技术的官方文档链接? - JohnK
1
不要以为这个方法是同步的,答案对我来说似乎是错误的。 - Blitz
4
我理解的 performSelectorOnMainThread 并且设置 waitUntilDone:NO 的含义是它会在下一次运行循环时执行,这与主队列(mainQueue)的行为完全相同。 - Blitz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接