2011-08-25 84 views
0

我正在爲iOS編寫一個多線程應用程序。 我是Objective-C的新手,所以在iPhone之前我還沒有玩過線程。可可觸摸線程問題

通常使用Java的時候,我創建一個線程,併發送「自我」爲對象的線程。並從我可以爲線程調用主線程。 這是如何在Objective C中完成的?

如何從線程調用主線程?我一直NSNotificationCenter嘗試,但我得到一個錯誤sigbart:/

這是線程的啓動方式:

NSArray *extraParams = [NSArray arrayWithObjects:savedUserName, serverInfo, nil];  // Parameters to pass to thread object 

NSThread *myThread = [[NSThread alloc] initWithTarget:statusGetter      // New thread with statusGetter 
              selector:@selector(getStatusFromServer:) // run method in statusGetter 
               object:extraParams];      // parameters passed as arraylist 
[myThread start];                  // Thread started 

activityContainerView.hidden = NO; 
[activityIndicator startAnimating]; 

任何幫助將是巨大的!

回答

1

您通過向主線程的運行循環添加消息來完成此操作。

基金會提供了一些便利這一點,尤其是-[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]NSInvocation

使用前者,你可以簡單地寫類似:

[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO]

的通知可以從輔助線程(通常調用線程)被派遣。

0

雖然這不是直接回答你的問題,我會強烈建議你在Grand Central Dispatch看一看。它通常比嘗試直接使用線程的性能更好。

賈斯汀指出的那樣,你可以隨時通過調用performSelectorOnMainThread,如果你真的太需要執行主線程的功能。

1

您可以使用performSelectorOnMainThread:withObject:waitUntilDone:,或者,如果你的目標的iOS 4及更高版本,大中央調度,它不要求你實現一個方法只與主線程同步:

dispatch_async(dispatch_get_main_queue(),^{ 
    // Do stuff on the main thread here... 
}); 

這通常會使您的代碼更易於閱讀。