自动同步: 使用 raw.struct 的成员操作符(点号与下标)读写对象时,
会自动双向同步 aardio 结构体与原生内存的值。
这种方式较方便,操作简单容易理解,但每次读写字段都要同步。 手动同步: 使用 raw.struct 对象的 get,set 函数手动控制内存同步。
这种方式必须熟悉内存同步规则与原理,略有些复杂,但有更好的效率。 这两个函数通常需要配对使用。
例如: raw.struct 对象的 set 函数执行如下操作: 使用 raw.struct 对象的 get 函数自原生内存读到结构体。
对 get 函数返回的普通结构体做读写操作不会自动同步。用法说明
raw.struct 要点:
raw.struct 对象两种内存同步方式:
//自原生内存单向读取普通结构体
var struct = rawStruct.get();
//修改普通结构体字段,读写操作不会自动同步原生内存。
struct.a = 1;
struct.b = 2;
//单向写入原生内存,不保留原生内存的任何值
rawStruct.set();
//上面的代码可以简化为:
rawStruct.set(
a = 1;//这种方式必须指定非 null 值。
b = 2;
)
创建静态内存结构体,在原生 API 函数中可作为指针类型参数使用。
aardio 结构体在与原生 API 交互时动态分配内存指针,
但静态内存结构体可以分配固定不变的内存指针。
读写静态内存结构体字段时直接自内存读写
如果结构体首个成员为原生类型数组,可直接用数值索引读写该数组成员。
静态内存结构体实例可作为原型函数调用复制新的静态内存结构体,
作为原型函数调用时可接控受任意个自定义返回对象字段值的表参数
创建静态内存结构体。
静态内存结构体可直接传入其他线程,
多线程可直接共享同一静态内存结构体内存指针,
但必须由创建静态内存结构体的线程负责维护该结构体的有效生命周期,
多线程读写此静态内存结构体时不会自动加锁
创建并返回静态内存结构体实例,
返回的静态内存结构体将自动分配 buffer 并绑定该 buffer 指针
返回用于创建静态内存结构体的类对象,
返回类创建静态内存结构体时自动分配 buffer 并绑定该 buffer 指针
创建并返回返回静态内存结构体实例,并绑定参数@2指定的内存指针,
参数@1可以是结构体类或结构体实例对象
读写结构体的字段值。
每次读写都会访问绑定的原生内存并交换数据。
可以使用 get 函数读出为普通结构体。
或用 set 函数一次写入普通结构体。
这样有更好的性能
返回对象绑定的普通结构体。
普通结构体操作更快,在修改完成以后
再调用 set 函数写回去就可以了。
get 函数只能用 . 成员操作符访问,且只能用于函数调用语句,
否则 get 仅作为结构体字段名使用。
将结构体的值写入原生内存。
set 函数只能用 . 成员操作符访问,且只能用于函数调用语句,
否则 set 仅作为结构体字段名使用
如果不指定任何参数,则将结构体所有字段重新写入原生内存。
写入前不会先自原生内存读取结构体,不保留原生内存的任何字段值。
如果参数 @tab 指定了表对象,
且参数 @overwrite 不为 true,则先自原生内存读取结构体。
然后用参数 @tab 指定表对象的所有字段非 null 值更新结构体。
未在参数中指定的字段将保留原生内存当前字段值。
注意此函数不能写入字段的 null 值。