Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 可以查询JavaScriptCore事件循环吗?_Ios_Cocoa_Javascriptcore - Fatal编程技术网

Ios 可以查询JavaScriptCore事件循环吗?

Ios 可以查询JavaScriptCore事件循环吗?,ios,cocoa,javascriptcore,Ios,Cocoa,Javascriptcore,如果我在iOS应用程序中使用JavaScriptCore运行一些JavaScript,我的本机代码是否可以查询JavaScript当前是否正在处理事件,和/或是否有事件等待下一步立即处理 场景:正在运行的JS正在管理某些状态,我希望我的UI线程偶尔查询JS的状态,但如果JS首先忙于处理其他事件,我不想冒等待时间过长的风险。基于对API源的快速阅读: 我在JSContext或JSVirtualMachine上看不到任何函数可以获取您感兴趣的信息 作为替代方案,您可以在每次JS代码开始/结束处理事

如果我在iOS应用程序中使用JavaScriptCore运行一些JavaScript,我的本机代码是否可以查询JavaScript当前是否正在处理事件,和/或是否有事件等待下一步立即处理


场景:正在运行的JS正在管理某些状态,我希望我的UI线程偶尔查询JS的状态,但如果JS首先忙于处理其他事件,我不想冒等待时间过长的风险。

基于对API源的快速阅读:

我在
JSContext
JSVirtualMachine
上看不到任何函数可以获取您感兴趣的信息


作为替代方案,您可以在每次JS代码开始/结束处理事件时从JS回调ObjC代码,然后将状态信息存储在ObjC端,这样您就可以快速确定您是否相信JSVM正在处理事件。

,并发现这个问题有一个令人惊讶的答案:如果不实现它,JSCore中就没有javascript事件循环


更详细地说,javascript代码的执行始终与调用它的ObjC函数同步,javascript中没有生成异步执行的方法:无
setTimeout
、无
setInterval
、无DOM和
addEventListener
。您必须以本机方式实现这些功能,然后您必须决定调度策略。如果您的JSContext附加到WebView或类似浏览器的上下文,则WebView会提供这些事件,您可能无法以所需的方式访问它们。不过,在这种情况下,您可以使用类似于monkey patch的方法来修补所有函数,这些函数可以生成事件,并在Javascript中实现一些跟踪您所需内容的功能(这是在技术演示视频的链接页面中完成的)

谢谢,这是一个有趣的想法。这需要我在每个JS事件处理程序中显式调用ObjC回调,对吗?有什么简单的方法可以在一个地方全局执行吗?我假设您知道正在运行什么代码,所以您可以只挂接正在运行JS VM的长时间运行的命令?挂接到任何可以创建异步代码执行的函数是Zone JS(Angular的一部分)所做的。它在Angular中这样做的原因是检测可能需要重新绘制UI的属性更改。看看它,看看它是否符合你的目的,是否可以在没有完整角度框架的情况下使用