关于iOS7里的JavaScriptCore framework

iOS7沸沸扬扬的扁平化论战之外,WWDC 2013还是公布了很多让开发者小兴奋的点,其中包括多任务加强支持background fetchtransfer,近场通信的AirDropp2p,以及游戏控制器和游戏中心的加强;当然还包括了让web开发同学很兴奋JavaScriptCore了。下面henry/webryan来详细介绍下整合JavaScriptCore到原生应用的情况。

102713_1406_iOS7JavaScr1.png

1、什么是JavaScriptCore

前端开发的同学应该知道,浏览器核心模块主要是渲染引擎和JavaScript引擎两部分组成。前者用于处理页面布局,渲染及DOM结构等,后者用于JavaScript的解析、执行及DOM交互等。

JavaScriptCore是一种JavaScript引擎,主要为webkit提供脚本处理能力(其主要以safari浏览器为代表)。除此之外,市面上还有注明的JscriptIE, SpiderMonkeyfirefox)和V8chrome)。JavaScriptCore是开源webkit的一部分,它提供了强大的整合能力,有兴趣的同学可以到官网下载编译和测试(http://www.webkit.org/projects/javascript/

102713_1406_iOS7JavaScr2.png

2、为什么苹果要在native应用中(非webview)引入JavaScript

首先,脱离了浏览器外壳和繁重的UI布局和渲染的JavaScript引擎,无疑可以将JavaScript的能力更轻便地、高性能地带给原生的iOS应用,给应用开发者提供更多的想象力(无论是PC还是移动的浏览器,UIGUI部分都是最重要的性能瓶颈和优化点)。

其次,在移动开发场景中确实有众多的开发者对JavaScript有需求。在google上搜索”embed javascript engine ios”可以得到大量的实践和博文。

再次,苹果已经在mac上得到很不错的实践和反响。引入JavaScriptCore即扩大了SDK能力又讨好了开发者,何乐不为呢。

102713_1406_iOS7JavaScr3.png

3、引入JavaScriptCore到底包括了哪些能力呢?

aObjective-C –> JavaScript (即在Objective-C语言环境里执行JavaScript代码段,创建JavaScript变量及变量操作等等)

bJavaScript –> Objective-C(即在JavaScript语言环境里调用Objective-C公开给JavaScript的方法)

c、内存管理和线程封装(主要是需要注意引用和线程使用冲突)

4、代码层具体应该怎么使用呢?

a、执行JavaScript代码的方法:首先引入JavaScriptCore.h,然后通过JSContext创建JS运行环境,再通过evaluateScript来执行结果;

102713_1406_iOS7JavaScr4.png

最后要访问执行结果的话,需要注意数据类型的转换,Objective-CJS的对应关系主要如下:

– (BOOL)toBool;

– (double)toDouble;

– (int32_t)toInt32;

– (uint32_t)toUInt32;

– (NSNumber *)toNumber;

– (NSString *)toString;

– (NSDate *)toDate;

– (NSArray *)toArray;

– (NSDictionary *)toDictionary;

– (id)toObject;

– (id)toObjectOfClass:(Class)expectedClass;

 

b、调用JS的函数:通过evaluateScript将脚本片段引入到上下文,然后通过callWithArguments进行调用。

102713_1406_iOS7JavaScr5.png

c、通过JS调用Objective-C的方法(1–Blocks(即function方式)

通过在Objective-CJS context直接定义函数,那么在JS语言环境里可以直接使用 makeNSColor函数。

102713_1406_iOS7JavaScr6.png

d、通过JS调用Objective-C的方法(2–JSExport(即object方式)

通过在Objective-C中声明JSExport的数据类型,可以直接在JS的语言环境里当作全局变量使用。

102713_1406_iOS7JavaScr7.png

OK相信看到这,你已经知道该怎么实现Objective-CJavaScript的相互调用了。其实这里和在浏览器中的相互操作是类似的。那么使用过过程中也要注意引用的回收和避免循环引用等问题,否则会导致内存泄露,甚至程序崩溃。这里我就不赘述了。

102713_1406_iOS7JavaScr8.png

5JavaScriptCore可以带来了哪些实战应用呢?

1、对于类Titanium的应用绝对是一大利好。Titanium就是通过内置JavaScript引擎操作Objective-C提供的能力,以达到通过JavaScript来开发相对高性能的应用(对比phonegap而言)。内置JavaScriptCore可以使类Titanium框架体积得到明显减小。

102713_1406_iOS7JavaScr9.png

2、对于动态更新类需求是非常有帮助的。JavaScript文件对于iOS7+的应用,相当于LuaCocos2d-x的意义,即提供一种动态局部升级和更新的逻辑,大大提高应用的可扩展性。

3、对手机内嵌web模式的新尝试点,即通过native+JS file的方式取代webview的方式。比如群创建页面,通过手Q提供基础的组件能力,通过加载JS文件来渲染生成创建群UI,并且通过HTTPTCP方式更新create.js,即可实现更贴近原生的交互体验和web的灵活性。

最后,技术果粉们可以到这里围观WWDC 2013年各个环节的详细视频和文档(https://developer.apple.com/wwdc/videos/index.php?id=615
),PSPC用户无法在线播放,可以下载SD版本观看和PDF学习。

: http://www.webryan.net/2013/10/about-ios7-javascriptcore-framework/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS中的JavaScriptCore是一个框架,它提供了将JavaScript代码嵌入到iOS应用程序中的功能。它是基于WebKit引擎的一部分,可以让开发者在iOS应用中执行JavaScript代码,并且可以实现JavaScript与Objective-C之间的相互调用。 JavaScriptCore框架提供了以下主要功能: 1. 执行JavaScript代码:可以使用JavaScriptCore框架来执行JavaScript代码,包括解析和执行JavaScript脚本文件。 2. JavaScript与Objective-C的相互调用:可以在Objective-C代码中调用JavaScript函数,并且可以在JavaScript代码中调用Objective-C方法。这种相互调用可以实现iOS应用与JavaScript之间的数据交互和功能扩展。 3. JavaScript对象与Objective-C对象的转换:JavaScriptCore框架提供了将JavaScript对象转换为Objective-C对象的功能,以及将Objective-C对象转换为JavaScript对象的功能。这样可以方便地在JavaScript和Objective-C之间传递数据。 4. JavaScript上下文管理:可以创建和管理多个JavaScript上下文,每个上下文都有自己的全局对象和执行环境。这样可以实现多个独立的JavaScript环境,避免不同模块之间的命名冲突。 5. JavaScript异常处理:JavaScriptCore框架提供了处理JavaScript异常的机制,可以捕获和处理JavaScript代码中的异常情况。 使用JavaScriptCore框架,开发者可以将JavaScript代码嵌入到iOS应用中,实现一些动态的功能和交互效果。比如,在一个网页浏览器应用中,可以使用JavaScriptCore框架来执行网页中的JavaScript代码,并且可以在Objective-C代码中调用JavaScript函数,实现与网页的交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值