NSOperationQueue mainQueue vs performSelectorOnMainThread?

时间:2012-05-09 02:17:05

标签: ios iphone objective-c concurrency nsoperationqueue

这有什么区别:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    [self doSomthing:object];
}];

和此:

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

1 个答案:

答案 0 :(得分:36)

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

调用时会执行选择器。如果要从后台线程影响UI,则必须使用此选项。如果你说YESwaitUntilDone,它将阻止线程,直到方法完成。

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