版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.10.13 |
前言
JavaScriptCore
是用來評估應用程序中的JavaScript
程序围橡,并支持應用程序的JavaScript腳本編寫。接下來這幾篇我們就詳細的解析一下JavaScriptCore框架的使用情況。
框架基本
首先我們先看一下該框架的基本信息沸久。
JavaScriptCore
是用來評估應用程序中的JavaScript
程序错沃,并支持應用程序的JavaScript腳本編寫田藐。
JavaScriptCore
框架提供了在Swift缆八、objective - c和基于c的應用程序中評估JavaScript程序的能力胞谭。您還可以使用JavaScriptCore向JavaScript環(huán)境插入自定義對象。
下面我們就簡單的看一下該框架的基本架構会烙。
框架結構
下面我們就詳細的看一下該框架的結構负懦。
1. Classes
-
- 一個
JSContext
對象表示一個JavaScript
執(zhí)行環(huán)境筒捺。您可以創(chuàng)建并使用JavaScript上下文來從objective - c或Swift代碼中評估JavaScript腳本柏腻,以訪問JavaScript中定義的或計算的值,并使JavaScript能夠訪問本機對象系吭、方法或函數(shù)五嫂。 - JS執(zhí)行的環(huán)境,同時也通過
JSVirtualMachine
管理著所有對象的生命周期,每個JSValue都和JSContext相關聯(lián)并且強引用context沃缘。
- 一個
-
-
JSManagedValue
對象包裝一個JSValue
對象躯枢,添加“conditional retain”
行為,以提供值的自動內(nèi)存管理槐臀。管理值的主要用例是在objective - c或Swift對象中存儲JavaScript值锄蹂,該對象本身被導出為JavaScript。 - JS和OC對象的內(nèi)存管理輔助對象水慨。由于JS內(nèi)存管理是垃圾回收得糜,并且JS中的對象都是強引用,而OC是引用計數(shù)晰洒。如果雙方相互引用朝抖,勢必會造成循環(huán)引用,而導致內(nèi)存泄露谍珊。我們可以用
JSManagedValue
保存JSValue來避免治宣。
-
-
-
JSValue
實例是對JavaScript值的引用。您可以使用JSValue類轉換JavaScript
和objective - c
或swift
之間的基本值(例如數(shù)字和字符串)砌滞,以便在本地代碼和JavaScript代碼之間傳遞數(shù)據(jù)侮邀。您還可以使用這個類創(chuàng)建JavaScript對象,這些對象包裝自定義類的本地對象或JavaScript函數(shù)贝润,這些函數(shù)的實現(xiàn)由原生方法或塊提供豌拙。 - 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執(zhí)行的獨立環(huán)境。使用這個類有兩個主要目的:支持并發(fā)的JavaScript執(zhí)行枝誊,以及管理JavaScript和objective - c或Swift之間橋接的對象的內(nèi)存况芒。
-
2. Protocols
-
JSExport
- 您實現(xiàn)的協(xié)議導出objective - c類及其實例方法、類方法和JavaScript代碼的屬性叶撒。如果JS對象想直接調(diào)用OC對象里面的方法和屬性绝骚,那么這個OC對象只要實現(xiàn)這個JSExport協(xié)議就可以了。
3. Legacy JavaScriptCore APIs
-
- 定義
JavaScriptCore
接口的引擎祠够。
- 定義
-
- 一個
JavaScript
對象压汪。
- 一個
-
- 一個UTF16字符緩沖區(qū),它是
JavaScript
的基本字符串表示古瓤。
- 一個UTF16字符緩沖區(qū),它是
-
- 包含
CFString
便利方法止剖。
- 包含
-
- 一個
JavaScript
值腺阳,它是所有JavaScript值和多態(tài)函數(shù)的基類型。
- 一個
4. Reference
后記
未完穿香,待續(xù)~~~