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

时间:2008-10-21 08:27:13

标签: objective-c cocoa multithreading

我注意到来自我主线程的以下平庸调用

[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 个答案:

答案 0 :(得分:6)

你确定吗?我将以下代码放在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

我还在我的applicationWillTerminate:方法中添加了第二个NSLog(...)语句,它还告诉我它不是多线程的。