【问题标题】:stringByEvaluatingJavaScriptFromString ios Hangs UIstringByEvaluatingJavaScriptFromString ios 挂起 UI
【发布时间】:2014-06-23 13:02:56
【问题描述】:

我必须每秒调用此方法 stringByEvaluatingJavaScriptFromString 来更新 Webview 的 UI。 每当调用该方法时,我的 UI 都会挂起一段时间。 以下代码 sn-p 没有解决我的问题。提前致谢。

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    dispatch_async(dispatch_get_main_queue(), ^{

    [webView stringByEvaluatingJavaScriptFromString:string];

    });
    });

【问题讨论】:

  • stringByEvaluatingJavaScriptFromString 阻塞了它运行的线程。
  • 因此你需要让你的java脚本更快,或者分解成更小的快速步骤

标签: ios user-interface ios7 uiwebview grand-central-dispatch


【解决方案1】:

一些搜索表明,包装在GCD 块中可能是一个错误,并且在帮助之后这样做:

[webView performSelectorOnMainThread:@selector(stringByEvaluatingJavaScriptFromString:) withObject:string waitUntilDone:NO];

但是,stringByEvaluatingJavaScriptFromString: 必须在主线程上调用,如果您的 string 变量很长,js 可能无法从 obj-c 一侧平滑它。您可以尝试优化您的js 代码。

【讨论】:

  • 如何阻止 gui 挂起?
  • 取决于您的js 代码的复杂程度,它不会。我看到的是,在将调用包装在块中时存在一个错误,导致 UI 锁定更长。 stackoverflow.com/questions/11593900/…
  • 知道有用。但是我认为操作人员发现对 stringByEvalutingJavaScriptFromString 的调用很慢,因此他将其包装在 dispatch_async 中,因为他认为这会使其异步运行,从而停止 gui 冻结。 “以下代码 sn-p 没有解决我的问题”即代码是尝试解决已经挂起的代码的解决方案
  • 问题是stringByEvalutingJavaScriptFromStringUIKit 的一部分,必须从主线程调用。我看到了一些其他的技巧来尝试并绕过它,但没有什么漂亮的。另外,我虽然 OP 说接受的答案解决了他的问题??
  • 出于好奇,您是否尝试将其更改为performSelectorOnMainThread??我很好奇它是否有任何作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
相关资源
最近更新 更多