JSVirtualMachine(Objective-C)官方文檔翻譯

繼承自:NSObject
遵守協(xié)議:NSObject
導入聲明:@import JavaScriptCore;
適用范圍:iOS 7.0 及以后

一瘦赫、概述

一個 JSVirtualMachine 實例代表一個執(zhí)行 JavaScript 的自包含(self-contained)的環(huán)境史隆。你可以用這個類做兩件事情:① JavaScript 的并發(fā)執(zhí)行夹纫;② 橋接 JavaScript 和 Objective-C 或 Swift 的對象的內(nèi)存管理。

1. 線程和 JavaScript 的并發(fā)執(zhí)行(Threading and Concurrent JavaScript Execution)

每一個 JavaScript 上下文(也就是一個 JSContext 對象)歸屬于一個虛擬機篙议。每一個虛擬機可以包含多個不同的上下文(context),而且可以在不同的上下文(context)之間傳值(JSValue 對象)。但是翘地,每一個虛擬機都是獨立的——你不能將在一個虛擬機中創(chuàng)建的值傳到另一個虛擬機的一個上下文中。

JavaScriptCore 的 API 是線程安全的癌幕。比如衙耕,你可以在任一線程中創(chuàng)建 JSValue 對象或者執(zhí)行 scripts,但是勺远,想要使用同一個虛擬機的所有其他線程都需要等待橙喘。如果要在多條不同線程上并發(fā)執(zhí)行 JavaScript ,那么你就要確保每一條線程使用的 JSVirtualMachine 實例都是獨立的胶逢。

2.導出對象的內(nèi)存管理(Managing Memory for Exported Objects)

當你將一個 Objective-C 或者 Swift 對象轉成 JavaScript時厅瞎,你一定不要在那個對象中存儲 JavaScript 值。否則初坠,這將導致循環(huán)引用—— JSValue 對象對它們的封閉的 JavaScript 上下文進行了強引用和簸, 而 JSContext 又對要被轉成 JavaScript 的原生對象進行了強引用。 你應該用 JSManagedValue 類有條件地持有(retain)一個 JavaScript 值碟刺,并且為 managed value向 JavaScriptCore 虛擬機說明原生的擁有關系鏈(ownership chain)锁保。使用 addManagedReference:withOwner:removeManagedReference:withOwner: 方法向 JavaScriptCore 描述你的原生對象圖(object graph)。在你移除了一個對象的最后一個 managed reference 后半沽,那個對象將會被 JavaScript 垃圾回收器(garbage collector)安全銷毀爽柒。

二、功能(Tasks)

1.創(chuàng)建一個 JavaScript 虛擬機(Creating a JavaScript Virtual Machine)
- init

Initializes a JavaScript virtual machine.

Declaration

- (instancetype)init

Return Value
A new, independent JavaScript virtual machine.

Discussion
Use this initializer to create a virtual machine for use with more than one JavaScript context. By default, creating a JSContext object automatically creates an independent virtual machine—to share a virtual machine between contexts, obtain a JSVirtualMachine instance and then create contexts using the initWithVirtualMachine: initializer.

Availability
Available in iOS 7.0 and later.

2.橋接值的內(nèi)存管理(Managing Memory for Bridged Values)
- addManagedReference:withOwner:

Notifies the JavaScriptCore virtual machine of an external object relationship.

Declaration

- (void)addManagedReference:(id)object
                  withOwner:(id)owner

Parameters

參數(shù) 含義
object The object to be referenced by the JavaScript memory management graph.
owner The other object responsible for the lifetime of the reference.

Discussion
Use this method to make the JavaScript runtime aware of arbitrary external Objective-C or Swift object graphs. The runtime can then use this information to retain any JavaScript values that are referenced from somewhere in said object graph.
For correct behavior, clients must make their external object graphs reachable from within the JavaScript runtime. If an Objective-C or Swift object is reachable from within the JavaScript runtime, all managed references transitively reachable from it as recorded using the addManagedReference:withOwner: method are scanned by the garbage collector.

Availability
Available in iOS 7.0 and later.

- removeManagedReference:withOwner:

Notifies the JavaScriptCore virtual machine that a previously registered object relationship no longer exists.

Declaration

- (void)removeManagedReference:(id)object
                     withOwner:(id)owner

Parameters

參數(shù) 含義
object The object formerly referenced by the JavaScript memory management graph.
owner The other object responsible for the lifetime of the reference.

Discussion
Use this method to deregister object relationships recorded using the removeManagedReference:withOwner: method.
The JavaScript garbage collector continues to scan any references that were reported to it until you use this method to remove those references.

Availability
Available in iOS 7.0 and later.

參考(Reference)
https://developer.apple.com/library/ios/documentation/JavaScriptCore/Reference/JSVirtualMachine_Ref/index.html#//apple_ref/occ/cl/JSVirtualMachine


問題(Question)

JSVirtualMachine 在內(nèi)存管理中扮演了什么樣的角色者填?

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浩村,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子占哟,更是在濱河造成了極大的恐慌心墅,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榨乎,死亡現(xiàn)場離奇詭異嗓化,居然都是意外死亡,警方通過查閱死者的電腦和手機谬哀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門刺覆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人史煎,你說我怎么就攤上這事谦屑〔蹬矗” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵氢橙,是天一觀的道長酝枢。 經(jīng)常有香客問我,道長悍手,這世上最難降的妖魔是什么帘睦? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮坦康,結果婚禮上竣付,老公的妹妹穿的比我還像新娘。我一直安慰自己滞欠,他們只是感情好古胆,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著筛璧,像睡著了一般逸绎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夭谤,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天棺牧,我揣著相機與錄音,去河邊找鬼朗儒。 笑死颊乘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的采蚀。 我是一名探鬼主播疲牵,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼承二,長吁一口氣:“原來是場噩夢啊……” “哼榆鼠!你這毒婦竟也來了?” 一聲冷哼從身側響起亥鸠,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤妆够,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后负蚊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體神妹,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年家妆,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸵荠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡伤极,死狀恐怖蛹找,靈堂內(nèi)的尸體忽然破棺而出姨伤,到底是詐尸還是另有隱情,我是刑警寧澤庸疾,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布乍楚,位于F島的核電站,受9級特大地震影響届慈,放射性物質(zhì)發(fā)生泄漏徒溪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一金顿、第九天 我趴在偏房一處隱蔽的房頂上張望臊泌。 院中可真熱鬧,春花似錦串绩、人聲如沸缺虐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽高氮。三九已至,卻和暖如春顷牌,著一層夾襖步出監(jiān)牢的瞬間剪芍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工窟蓝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罪裹,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓运挫,卻偏偏與公主長得像状共,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谁帕,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容