JavaScriptCore 框架详细解析(一) —— 基本概要

版本记录

版本号 时间
V1.0 2017.10.13

前言

JavaScriptCore是用来评估应用程序中的JavaScript程序,并支持应用程序的JavaScript脚本编写。接下来这几篇我们就详细的解析一下JavaScriptCore框架的使用情况。

框架基本

首先我们先看一下该框架的基本信息。

JavaScriptCore 框架详细解析(一) —— 基本概要_第1张图片

JavaScriptCore是用来评估应用程序中的JavaScript程序,并支持应用程序的JavaScript脚本编写。

JavaScriptCore框架提供了在Swift、objective - c和基于c的应用程序中评估JavaScript程序的能力。您还可以使用JavaScriptCore向JavaScript环境插入自定义对象。

下面我们就简单的看一下该框架的基本架构。

JavaScriptCore 框架详细解析(一) —— 基本概要_第2张图片

框架结构

下面我们就详细的看一下该框架的结构。

1. Classes

  • JSContext

    • 一个JSContext对象表示一个JavaScript执行环境。您可以创建并使用JavaScript上下文来从objective - c或Swift代码中评估JavaScript脚本,以访问JavaScript中定义的或计算的值,并使JavaScript能够访问本机对象、方法或函数。
    • JS执行的环境,同时也通过JSVirtualMachine管理着所有对象的生命周期,每个JSValue都和JSContext相关联并且强引用context。
  • JSManagedValue

    • JSManagedValue对象包装一个JSValue对象,添加“conditional retain”行为,以提供值的自动内存管理。管理值的主要用例是在objective - c或Swift对象中存储JavaScript值,该对象本身被导出为JavaScript。
    • JS和OC对象的内存管理辅助对象。由于JS内存管理是垃圾回收,并且JS中的对象都是强引用,而OC是引用计数。如果双方相互引用,势必会造成循环引用,而导致内存泄露。我们可以用JSManagedValue保存JSValue来避免。
  • JSValue

    • JSValue实例是对JavaScript值的引用。您可以使用JSValue类转换JavaScriptobjective - cswift之间的基本值(例如数字和字符串),以便在本地代码和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

  • JSBase.h

    • 定义JavaScriptCore接口的引擎。
  • JSContextRef.h

  • JSObjectRef.h

    • 一个JavaScript对象。
  • JSStringRef.h

    • 一个UTF16字符缓冲区,它是JavaScript的基本字符串表示。
  • JSStringRefCF.h

    • 包含CFString便利方法。
  • JSValueRef.h

    • 一个JavaScript值,它是所有JavaScript值和多态函数的基类型。

4. Reference

  • JavaScriptCore Enumerations

  • JavaScriptCore Constants

  • JavaScriptCore Functions

  • JavaScriptCore Data Types

后记

未完,待续~~~

JavaScriptCore 框架详细解析(一) —— 基本概要_第3张图片

你可能感兴趣的:(JavaScriptCore 框架详细解析(一) —— 基本概要)