JavaScriptCore是iOS7之后apple提供的一个Native与js之间通信用的一个framework.
1. 利用JavaScriptCore我们可以直接在native中调用js, 如下:
JSValue*add =self.context[@"add"]; // 获取js中的add function.
JSValue*sum = [add callWithArguments:@[@(7),@(21)]]; // 执行js中的add function.
2.利用javaScriptCore在js中直接调用native中的方法,如下:
var person;//用这个全局变量和native的Person变量绑定,之后就可以像下面这样直接用它去调用native的方法了。
function doFooWithBar() {
person.doFooWithBar("这是从js里面调用的","OC native的方法");
}
3.内存管理,因为OC中的内存管理和js中的内存管理方式完全不同,为了防止两边的内存访问出错,javaScriptCore提供了JSVirtualMachine为整个JavaScriptCore的执行提供资源,所以当将一个JSValue转成JSManagedValue后,就可以添加到JSVirtualMachine中,这样在运行期间就可以保证在Objective-C和JavaScript两侧都可以正确访问对象而不会造成不必要的麻烦。
可执行demo请参考gitHub:github.com/archerLj/JavaScriptCoreExample/tree/master
网友评论