1
나는 JSContext
만들고 javascript
의 간단한 조각을 평가하고 있습니다에 통과 이후에 출시되지NSObject의이 ... JavaScriptCore는
function test(obj) {
}
다음, 내가 만드는거야 INIT
다음 아무 이상 포함하지 않는 NSObject
및 DEINIT
기능.
자바 스크립트 테스트 함수를 호출하고 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