iPhone - 线程

时间:2010-11-21 13:07:36

标签: iphone

使用此

有什么区别
[self performSelectorOnMainThread:@selector(doStuff:) 
                       withObject:myObject 
                    waitUntilDone:YES];

而不是简单

[self doStuff:myObject];

就CPU负载而言?还是有其他优势?

感谢。

3 个答案:

答案 0 :(得分:2)

[self performSelectorOnMainThread:@selector(doStuff:) 
                   withObject:myObject 
                waitUntilDone:YES];

这确保通过将选择器添加到主运行循环来在主线程上执行选择器。设置waitUntilDone:YES时,只要主运行循环需要执行选择器,您将使当前线程处于空闲状态。 在单线程环境中,这将使runloop在调用之后立即运行,在多线程环境中,主runloop将在下一步执行选择器时执行。

在这两种情况下都有一个很小的开销,因为在你调用函数后不会立即执行选择器,而是在[self doStuff:myObject];立即执行选择器的时候执行选择

答案 1 :(得分:1)

第一个确保您的方法将在主线程中调用。如果你没有进行多线程处理,它们应该产生相同的结果。

答案 2 :(得分:1)

在您的示例中,第二条消息将立即发送,而第一条消息将添加到主线程的运行循环中,因此不会立即运行。