2016-12-23 198 views
1

我有一個關於Qt Javascript的問題。Qt QML Javascript如何管理內存?

在大多數情況下,JavaScript使用引用計數或標記和掃描進行垃圾回收。我很好奇Qt是如何做到的。

尤其是,我可以使用QJSValue將JavaScript對象傳遞給C++。我想將JavaScript回調函數傳遞給C++方法,並異步調用該函數(例如,http響應)是否安全,因爲QJSValue引用了該對象?我無法確定。

如果Qt使用標記和清理垃圾回收,那麼在C++端如何標記參考? Qt JavaScript也使用引用計數?

+0

歡迎來到Stack Overflow。請花些時間閱讀[The Tour](http://stackoverflow.com/tour),並參閱[幫助中心](http://stackoverflow.com/help/asking)中的資料,瞭解您可以在這裏問。 –

+0

這裏的JavaScript部分將使用主機操作系統使用的任何腳本,在Windows的情況下使用MSHTA。 Qt本身沒有垃圾回收或碎片整理,它使用C++運行時。 – Swift

+0

有時它不會:https://bugreports.qt.io/browse/QTBUG-50319 – dtech

回答

1

http://doc.qt.io/qt-5/qjsvalue.html

。注意,QJSValue爲其則IsObject()爲真僅承載到一個實際的對象的引用;複製QJSValue將只複製對象引用,而不是對象本身。如果您想克隆一個對象(即將一個對象的屬性複製到另一個對象),您可以藉助腳本代碼中的for-in語句或C++中的QJSValueIterator來完成此操作。

QJSValue帶有參考。