JSManagedValue(Objective-C)官方文档翻译

继承自:NSObject
遵守协议:NSObject
导入声明:@import JavaScriptCore;
适用范围:iOS 7.0 及以后

一个 JSManagedValue 对象是用来包装一个 JSValue 对象的,JSManagedValue 对象通过添加“有条件的持有(conditional retain)”行为来实现自动内存管理。一个managed value 的基本用法就是用来在一个要导出(exported)到 JavaScript 的 Objective-C 或者 Swift 对象中存储一个 JavaScript 值。

重要
不要在一个要导出(exported)到 JavaScript 的原生对象中存储一个 non-managed JSValue 对象。因为一个 JSValue 对象引用了它的封闭的(enclosing)JSContext 对象,这样就造成了循环引用,context 就不能被销毁了。

IMPORTANT
Do not store a non-managed JSValue object in a native object that is exported to JavaScript. Because a JSValue object references its enclosing JSContext object, this action creates a retain cycle, keeping the context from being deallocated.

只要下面所列出的情形中有一种出现,一个 managed value 的 “conditional retain” 行为就会保证他的 JavaScript 值是 retained 的:

The JavaScript value is reachable through the JavaScript object graph (that is, not subject to JavaScript garbage collection)

  • The JSManagedValue object is reachable through the Objective-C or Swift object graph, as reported to the JavaScriptCore virtual machine using the addManagedReference:withOwner: method

但是,如果这些条件没有一个成立,那个 managed value 就会将它的 value 属性置为 nil,并且释放 JSValue 对象。

说明
一个 JSManagedValue 对象本身就像是一个对它的 JSValue 的 ARC 弱引用——也就是说,如果你不用 addManagedReference:withOwner: 方法去添加 “conditional retain” 行为,那么当 JavaScript 垃圾回收器(garbage collector )销毁了那个 managed value 对应的 JavaScript 值时,那个 managed value 的 value 属性会自动变成 nil。

NOTE
On its own, a JSManagedValue object behaves similarly to an ARC weak reference to its underlying JSValue object—that is, if you do not use the addManagedReference:withOwner: method to add “conditional retain” behavior, the managed value’s value property automatically becomes nil when the JavaScript garbage collector destroys the underlying JavaScript value.

一、功能(Tasks)

1.创建一个 Managed Value (Creating a Managed Value)
- initWithValue:

Initializes a managed value with the specified JavaScript value.

Declaration

- (instancetype)initWithValue:(JSValue *)value

Parameters

参数 含义
value A JavaScript value.

Return Value
A new managed value.

Discussion
To ensure that the underlying JavaScript value is retained as long as the managed value remains in use in the Objective-C or Swift runtime, report the managed value’s owner to the JavaScriptCore virtual machine using the addManagedReference:withOwner: method.

Availability
Available in iOS 7.0 and later.


+ managedValueWithValue:

Creates a managed value with the specified JavaScript value.

Declaration

+ (JSManagedValue *)managedValueWithValue:(JSValue *)value

Parameters

参数 含义
value A JavaScript value.

Return Value
A new managed value.

Discussion
To ensure that the underlying JavaScript value is retained as long as the managed value remains in use in the Objective-C or Swift runtime, report the managed value’s owner to the JavaScriptCore virtual machine using the addManagedReference:withOwner:
method.

Availability
Available in iOS 7.0 and later.


+ managedValueWithValue:andOwner:

Creates a managed value and associates it with an owner.

Declaration

+ (JSManagedValue *)managedValueWithValue:(JSValue *)value
                                 andOwner:(id)owner

Parameters

参数 含义
value A JavaScript value.
owner The Objective-C or Swift object responsible for

Return Value
A new managed value.

Discussion
Calling this method is equivalent to creating a managed value and then reporting it to the JavaScriptCore virtual machine using the addManagedReference:withOwner: method.

Availability
Available in iOS 8.0 and later.

2.获取 Managed Value(Accessing the Managed Value)
value Property

The managed value’s underlying JavaScript value. (read-only)

Declaration

@property(readonly, strong) JSValue *value

Discussion
If the JavaScript garbage collector removes the underlying value, this property becomes nil.

Availability
Available in iOS 7.0 and later.

二、文档修订记录(Document Revision History)

下表中所列出的是文档 JSManagedValue Class Reference 的修改记录。

日期 说明
2016-03-21 修复排版错误。
2015-12-08 创建新文档,描述一个 JavaScript 虚拟机(virtual machine)的对象空间(object space)中的值的内存管理。

参考(Reference)
https://developer.apple.com/library/ios/documentation/JavaScriptCore/Reference/JSManagedValue_Ref/index.html#//apple_ref/occ/cl/JSManagedValue


问题(Question)
1.JSManagedValue 对象在内存管理中扮演了什么样的角色?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JSContext 继承自:NSObject遵守协议:NSObject导入声明:@import JavaScrip...
    ShannonChenCHN阅读 2,708评论 0 0
  • 忆残木, 却枯草亡树相随; 却白蚁幼菌相伴; 却大海新木相守。 忆孤舟, 有止风平浪为夜的时光; 有飞鱼海鸟为伴的...
    默土虫阅读 217评论 0 0
  • 孔子在《礼记》里讲“饮食男女,人之大欲存焉。”是孔子对于人生的看法,凡是人的生命,不离两件大事:饮食、男女,很赞同...
    娃娃和小树阅读 283评论 0 1
  • 准备篇&福冈篇戳这里:日本自由行|准备篇&福冈篇 3.长崎 我们在长崎停留了两天,第一天在佐世保市,第二天在长崎市...
    小马君_Ellie阅读 2,341评论 5 7