2008-10-21 32 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:方法和它也告訴我這不是多線程的。

相關問題