代码之家  ›  专栏  ›  技术社区  ›  Duck

iPhone-线程

  •  2
  • Duck  · 技术社区  · 14 年前

    使用这个有什么区别

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

    而不是简单的

    [self doStuff:myObject];
    

    在CPU负载方面?或者还有其他好处吗?

    谢谢。

    3 回复  |  直到 14 年前
        1
  •  2
  •   JustSid    14 年前
    [self performSelectorOnMainThread:@selector(doStuff:) 
                       withObject:myObject 
                    waitUntilDone:YES];
    

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

    在这两种情况下,都有一点开销,因为选择器在调用函数之后并没有立即执行,而是在稍后的时间 [self doStuff:myObject]; 立即执行选择器

        2
  •  1
  •   tia    14 年前

    第一个只是确保您的方法将在主线程中被调用。如果不执行多线程处理,它们应该产生相同的结果。

        3
  •  1
  •   Abizern    14 年前

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