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

performelectornmainthread工作,但performelector不工作,为什么?

  •  0
  • erotsppa  · 技术社区  · 15 年前

    我有一个选择器和目标,并调用这样的方法

    [target performSelectorOnMainThread:(SEL)selector withObject:nil waitUntilDone:FALSE];
    

    但当我把它改成这个后,它就不起作用了

    [target performSelector:(SEL)selector withObject:nil afterDelay:0];
    

    有什么想法吗?

    我不想在主线程上执行该任务,因为它会滞后于UI。

    by不起作用,我的意思是它根本不调用方法。我在模拟器中调试了它,并确认它没有被调用。

    1 回复  |  直到 15 年前
        1
  •  11
  •   Nikolai Ruhe    15 年前

    我假设您是从另一个线程发送消息。Cocoa只是为主线程构建一个运行循环,对于其他线程,您必须自己构建一个。方法 performSelector:withObject:afterDelay: 为下一次通过运行循环调度消息。因此,如果没有,消息将不会被发送。

    对于你的案子,你为什么不直接把 [target performSelector:selector withObject:nil]; ?您不需要运行循环,消息将立即发送(在同一线程上)。