【问题标题】:NSOperationQueue mainQueue vs performSelectorOnMainThread?NSOperationQueue mainQueue vs performSelectorOnMainThread?
【发布时间】:2012-05-17 13:14:16
【问题描述】:

这有什么区别:

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

还有这个:

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

【问题讨论】:

    标签: ios iphone objective-c concurrency nsoperationqueue


    【解决方案1】:
    [self performSelectorOnMainThread:@selector(doSomething:) 
                           withObject:object 
                        waitUntilDone:NO]
    

    将在调用时执行选择器。如果您想从后台线程影响 UI,这就是您必须使用的。如果你说YESwaitUntilDone 它会阻塞线程直到方法完成。

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

    【讨论】:

    • 解释得很清楚;我想知道为什么 OP 没有接受它作为答案。您能否提供有关这两种技术的官方文档的链接?
    • 不要以为这个方法是同步的,我的答案好像不对。
    • 我对带有 waitUntilDone:NO 的 performSelectorOnMainThread 的理解是它在运行循环的下一次循环中执行,这与 mainQueue 的行为完全相同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多