使用此
有什么区别[self performSelectorOnMainThread:@selector(doStuff:)
withObject:myObject
waitUntilDone:YES];
而不是简单
[self doStuff:myObject];
就CPU负载而言?还是有其他优势?
感谢。
答案 0 :(得分:2)
[self performSelectorOnMainThread:@selector(doStuff:)
withObject:myObject
waitUntilDone:YES];
这确保通过将选择器添加到主运行循环来在主线程上执行选择器。设置waitUntilDone:YES
时,只要主运行循环需要执行选择器,您将使当前线程处于空闲状态。
在单线程环境中,这将使runloop在调用之后立即运行,在多线程环境中,主runloop将在下一步执行选择器时执行。
在这两种情况下都有一个很小的开销,因为在你调用函数后不会立即执行选择器,而是在[self doStuff:myObject];
立即执行选择器的时候执行选择
答案 1 :(得分:1)
第一个确保您的方法将在主线程中调用。如果你没有进行多线程处理,它们应该产生相同的结果。
答案 2 :(得分:1)
在您的示例中,第二条消息将立即发送,而第一条消息将添加到主线程的运行循环中,因此不会立即运行。