NSOperationQueue mainQueue vs performSelectorOnMainThread?

ma1*_*w28 25 iphone concurrency objective-c nsoperationqueue ios

这有什么区别:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    [self doSomthing:object];
}];
Run Code Online (Sandbox Code Playgroud)

还有这个:

[self performSelectorOnMainThread:@selector(doSomething:) withObject:object waitUntilDone:NO]
Run Code Online (Sandbox Code Playgroud)

Mik*_*e Z 36

[self performSelectorOnMainThread:@selector(doSomething:) 
                       withObject:object 
                    waitUntilDone:NO]
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我对waitUntilDone的`performSelectorOnMainThread`的理解是:NO是它在下一次运行循环时执行,这与mainQueue的行为完全相同 (4认同)