2008-10-21 50 views
4

我注意到,从我的主线程调用performSelectorOnMainThread =>多线程应用程序?

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

以下平庸呼叫造成[NSThread isMultiThreaded]向大家报告,我的应用程序
已成为多线程。我以为只有当你分离一个线程时,才会发生
,这是在一个线程中排队的消息不应该做的事情。

任何见解?

这个问题与this不一样。

停止按
是我的错,rollBar:称为[m_progress_bar incrementBy: 0.5];
漂亮的,可舔的,动画NSProgressIndicator负责
让我的应用成为多线程。这是令人惊讶的。
我不知道。

令人惊讶的是,[m_progress_bar usesThreadedAnimation]总是
返回NO,即使当我的应用程序挂起时条形图动画。

+0

但是如果你试图运行一些东西(在主线程中)并且不愿意等到这个操作完成(“waitUntilDone:false”)并不意味着你必须至少有两个线程? – diciu 2008-10-21 08:38:18

+0

不,你只是将事件发布到你自己的线程队列中。 至少这是你所期望的。徘徊虽然,我 想通了:我做了一些愚蠢的,但结果是令人惊讶。 – 2008-10-21 13:02:14

回答

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 

我还添加了第二NSLog(...)声明我applicationWillTerminate:方法和它也告诉我这不是多线程的。