【发布时间】:2016-09-30 13:24:08
【问题描述】:
我正在创建一个 JSContext 并评估一个简单的 javascript...
function test(obj) {
}
接下来,我将创建一个 NSObject,其中仅包含 INIT 和 DEINIT 函数。
当我调用 javascript 测试函数并传入 NSObject 时,永远不会调用 NSObjects DEINIT 方法。我不确定为什么在执行 Test 函数后没有任何东西可以让它保持活动状态时它没有被释放。
斯威夫特游乐场
import UIKit
import JavaScriptCore
/**************************/
/******* SwiftObject ******/
/**************************/
@objc protocol SwiftObjectExport: JSExport {
}
class SwiftObject: NSObject, SwiftObjectExport {
override init() {
super.init()
print("[INIT] SwiftObject")
}
deinit {
print("[DEINIT] SwiftObject")
}
}
/**************************/
/******** Main ************/
/**************************/
// DEINIT does NOT fires with this test
func test() {
let jsContext = JSContext()
jsContext?.evaluateScript("function test(obj) { } ")
let obj = SwiftObject()
jsContext?.objectForKeyedSubscript("test").call(withArguments: [obj])
}
// DEINIT fires with this test
func test2() {
let jsContext = JSContext()
jsContext?.evaluateScript("function test(obj) { } ")
let obj = SwiftObject()
}
print("Running test 1...")
test() // DEINIT does NOT fires with this test
print("Running test 2...")
test2() // DEINIT fires with this test
【问题讨论】:
标签: ios swift javascriptcore