代码之家  ›  专栏  ›  技术社区  ›  Gordon Childs

调用performSelectorOnMainThread=>多线程应用程序?

  •  4
  • Gordon Childs  · 技术社区  · 16 年前

    我注意到,我的主线上有一个平庸的电话

    [self performSelectorOnMainThread:@selector(rollBar:)
          withObject:nil
          waitUntilDone:false];
    

    导致 [NSThread isMultiThreaded] 报告我的应用程序
    已经变成了多线程。我以为那是理所当然的
    当你分离一个线程时,就会发生排队
    一个线程中的消息不需要这样做。

    有什么见解吗?

    这个问题与 this 一个。

    停止印刷
    是我的错, rollBar: 叫做 [m_progress_bar incrementBy: 0.5]; .
    漂亮、可爱、生动 NSProgressIndicator 负责
    让我的应用程序变成多线程。这令人惊讶。
    我不知道。

    令人惊讶的是, [m_progress_bar usesThreadedAnimation] 总是
    返回 NO ,尽管当我的应用程序挂起时,工具栏会动画化。

    1 回复  |  直到 8 年前
        1
  •  6
  •   Ben Gottlieb    16 年前

    你确定吗?我在appDelegate的init方法中放入了以下代码:

    NSLog(@"Multi-threaded before? %@", [NSThread isMultiThreaded] ? @"Yes" : @"No");
    [self performSelectorOnMainThread: @selector(setDelegate:) withObject: self waitUntilDone: NO];
    NSLog(@"Multi-threaded after? %@", [NSThread isMultiThreaded] ? @"Yes" : @"No");
    

    并在控制台中得到以下结果:

    2008-10-21 07:26:28.296 MyApplication[82963:20b] Multi-threaded before? No
    2008-10-21 07:26:28.297 MyApplication[82963:20b] Multi-threaded after? No
    

    我还添加了第二个 NSLog(...) 语句指向我的应用程序WillTerminate:方法,它还告诉我它不是多线程的。