osx多线程和webviews

时间:2015-11-03 12:50:22

标签: javascript html objective-c multithreading webview

我不是应用程序开发人员所以这可能很容易回答。

我有一个显示简单HTML页面的webview。除此之外,我有一个简单的新娘,从objective-c到javascript,所以我可以在HTML页面和应用程序之间发送消息。

在HTML页面中有一个按钮,当您单击它时,会将一条消息发送到启动NSTimer的objective-c。定时器每300ms调用一次函数。该函数通过objective-c到javascript桥接器向HTML页面发送一个随机数。

此函数应该进行一些繁重的处理,然后将结果发送回HTML页面。这个功能需要尽可能多的“力量”。

我的问题很简单,我是否需要创建一个单独的线程来处理工作和发布?或者这不是问题,因为通信是在webview中的HTML页面?

如果我需要一个单独的帖子,请指出我正确的方向,我可以了解它。

1 个答案:

答案 0 :(得分: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的内容始终相同并且仅在繁重的过程完成后才更新,则差异不会引人注意。 (也许鼠标图标一直在旋转)。