Защита от изменения содержимого ArrayBuffer
в JavaScriptCore
В какой-то момент при выполнении JavaScript в JSContext
я получаю ссылку на ArrayBuffer
(как JSValue*
), и мне нужнозащитить память, на которую указывает ArrayBuffer
, от изменения ее содержимого.
Подробности:
ArrayBuffer
создан в движке JavaScript, и ссылка передается «на нативную сторону»:
var myBuffer = new ArrayBuffer(32);
protectBufferMemory(myBuffer);
Теперь я хотел бы скрыть содержимое ArrayBuffer
из движка JavaScript.Было бы лучше, если бы ArrayBuffer
мог внезапно вернуть 0 для byteLength
, оставаясь пустым и не изменяющим размер при просмотре с любым TypedArray
.
В то же время мне нужно сохранить содержимоеArrayBuffer
в памяти там же, где и был.Я не хочу копировать эти байты.
Примечание: именно так ArrayBuffer
ведет себя в Chrome, когда вы postMessage
превращаетесь в Worker
с ArrayBuffer
экземпляром в массиве "Transfer".
Если нет способа сделать это, приемлемы также следующие альтернативы:
Удаление экземпляра ArrayBuffer
из движка JavaScript, чтобы все переменные указывалик нему вернется undefined
также будет приемлемо.Пока данные не будут удалены из памяти.
Сохранение ArrayBuffer
данных видимыми в движке JavaScript, но запрещение модификации.
Я нашелнет способа реализовать какой-либо из них с общедоступным API на iOS.