版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.10.13 |
前言
JavaScriptCore
是用来评估应用程序中的JavaScript
程序,并支持应用程序的JavaScript脚本编写。接下来这几篇我们就详细的解析一下JavaScriptCore框架的使用情况。
框架基本
首先我们先看一下该框架的基本信息。
JavaScriptCore
是用来评估应用程序中的JavaScript
程序,并支持应用程序的JavaScript脚本编写。
JavaScriptCore
框架提供了在Swift、objective - c和基于c的应用程序中评估JavaScript程序的能力。您还可以使用JavaScriptCore向JavaScript环境插入自定义对象。
下面我们就简单的看一下该框架的基本架构。
框架结构
下面我们就详细的看一下该框架的结构。
1. Classes
-
- 一个
JSContext
对象表示一个JavaScript
执行环境。您可以创建并使用JavaScript上下文来从objective - c或Swift代码中评估JavaScript脚本,以访问JavaScript中定义的或计算的值,并使JavaScript能够访问本机对象、方法或函数。 - JS执行的环境,同时也通过
JSVirtualMachine
管理着所有对象的生命周期,每个JSValue都和JSContext相关联并且强引用context。
- 一个
-
-
JSManagedValue
对象包装一个JSValue
对象,添加“conditional retain”
行为,以提供值的自动内存管理。管理值的主要用例是在objective - c或Swift对象中存储JavaScript值,该对象本身被导出为JavaScript。 - JS和OC对象的内存管理辅助对象。由于JS内存管理是垃圾回收,并且JS中的对象都是强引用,而OC是引用计数。如果双方相互引用,势必会造成循环引用,而导致内存泄露。我们可以用
JSManagedValue
保存JSValue来避免。
-
-
-
JSValue
实例是对JavaScript值的引用。您可以使用JSValue类转换JavaScript
和objective - c
或swift
之间的基本值(例如数字和字符串),以便在本地代码和JavaScript代码之间传递数据。您还可以使用这个类创建JavaScript对象,这些对象包装自定义类的本地对象或JavaScript函数,这些函数的实现由原生方法或块提供。 - JS对象在
JSVirtualMachine
中的一个强引用,其实就是Hybird
对象。我们对JS的操作都是通过它。并且每个JSValue都是强引用一个context。同时,OC和JS对象之间的转换也是通过它。
-
Objective-C type | JavaScript type
--------------------+---------------------
nil | undefined
NSNull | null
NSString | string
NSNumber | number, boolean
NSDictionary | Object object
NSArray | Array object
NSDate | Date object
NSBlock (1) | Function object (1)
id (2) | Wrapper object (2)
Class (3) | Constructor object (3)
-
JSVirtualMachine
-
JSVirtualMachine
实例表示用于JavaScript执行的独立环境。使用这个类有两个主要目的:支持并发的JavaScript执行,以及管理JavaScript和objective - c或Swift之间桥接的对象的内存。
-
2. Protocols
-
JSExport
- 您实现的协议导出objective - c类及其实例方法、类方法和JavaScript代码的属性。如果JS对象想直接调用OC对象里面的方法和属性,那么这个OC对象只要实现这个JSExport协议就可以了。
3. Legacy JavaScriptCore APIs
-
- 定义
JavaScriptCore
接口的引擎。
- 定义
-
- 一个
JavaScript
对象。
- 一个
-
- 一个UTF16字符缓冲区,它是
JavaScript
的基本字符串表示。
- 一个UTF16字符缓冲区,它是
-
- 包含
CFString
便利方法。
- 包含
-
- 一个
JavaScript
值,它是所有JavaScript值和多态函数的基类型。
- 一个
4. Reference
后记
未完,待续~~~