2015-11-03 24 views
0

我不是一個應用程序開發人員,所以這可能是非常簡單的回答。osx多線程和webviews

我有一個webview,顯示一個簡單的HTML頁面。最重要的是,我有一個簡單的新娘,從Objective-C到JavaScript,因此我可以在HTML頁面和應用程序之間發送消息。

在HTML頁面中有一個按鈕,當你點擊它時,一條消息被髮送到啓動NSTimer的objective-c。定時器每300ms調用一次功能。該函數通過objective-c向javascript橋發送一個隨機數到HTML頁面。

該函數應該執行一些繁重的處理,然後將結果發送回HTML頁面。這個功能需要儘可能多的「權力」。

我的問題很簡單,是否需要創建一個單獨的線程來處理工作和發佈,或者這不是一個問題,因爲通信是在webview中的HTML頁面?

如果我需要一個單獨的線程,請指向我可以瞭解它的正確方向。

回答

1

簡短回答:是的,你應該把你的重處理放在主線程之外。
您可以使用:

[self performSelectorOnMainThread:@selector(heavyProcessing:) withObject:@"Argument" waitUntilDone:NO]; 

或使用GCD。勾選此How do I create a NSTimer on a background thread?

如果你真的想了解用什麼,爲什麼,請閱讀本 Concurrency Programming Guide

龍答: 這要看情況。如果您的HTML具有動畫,或者它允許交互(如用戶可以按按鈕和發生的事情),WebView將在執行繁重處理時凍結。但是,如果WebView的內容總是相同的並且只有在繁重的過程完成後才更新,那麼差異將不會顯而易見。 (也許鼠標圖標繼續旋轉)。

+0

感謝您的答案和鏈接,真的很有幫助。結束使用dispatch_async,dispatch_get_main_queue和detachNewThreadSelector。 – tbleckert

+0

@tbleckert很高興它幫助! – subzero