首先我们先认识JSBinding
JSBinding本身并非Hybrid,本质上也并无任何联系。
JSBinding实际是JS 与 Native 间的一座桥梁,通过JS引擎进行交互。
Hybrid实际是Web 与 Native间的一座桥梁,还是通过Web中,实际应用中仍然是WebView。
原生语言特点 :1、高性能 2、更底层 更强大 3、平台特性
动态脚本语言 :1、简单易用 2、免编译 3、热部署
那么在iOS7中两者可以很好的兼容。
JavaScriptCore
1、引入头文件JavaScriptCore.h
2、JSContext (JS上下文或一个运行环境)
3、JSValue
4、JSExport
下面是一些简单的JSBinding代码
//JS上下文
JSContext *context = [[JSContext alloc] init];
//异常处理器
context.exceptionHandler = ^(JSContext *ctx,JSValue *exception)
{
NSLog(@"%@",exception);
};
NSString *strScript;
JSValue *result;
//运算JS
strScript = @"1+2+3.2";
result = [context evaluateScript:strScript];
NSLog(@" %@ = %f",strScript,[result toDouble]);
//定义JS变量,获取JS变量
strScript = @"var globalVar = 2*3+1;";
result = [context evaluateScript:strScript];
NSLog(@" var globalVar= %@",context[@"globalVar"]);
//定义JS函数
strScript = @"function sum(a,b){return a+b};";
[context evaluateScript:strScript];
JSValue *sum = context[@"sum"];
result = [sum callWithArguments:@[@1,@2]];
NSLog(@"sum = %f",[result toDouble]);
//定义变量
JSValue *foo = [JSValue valueWithDouble:123.123 inContext:context];
context[@"foo"] = foo;
[context evaluateScript:@"foo++;"];
NSLog(@"foo = %f",[context[@"foo"] toDouble]);
//联合GCD
context[@"sum"] = ^(int a,int b)
{
return a+b;
};
result = [context evaluateScript:@"sum(1,2);"];
NSLog(@"sum1 = %f",[result toDouble]);