C++与Lua进数据交换的工具函数

来源:互联网 发布:大数据 结构化数据 编辑:程序博客网 时间:2024/06/05 04:36

1)tolua.type
返回一个 C++ 对象的类型描述字符串

格式:
self.studio.layout = cc.CSLoader:createNode(GAMETABLE_CSB);
print(tolua.type(self.studio.layout))               -- 输出 cc.Node

2)tolua.cast
强制转换对象类型

格式:
tolua.cast(对象, 类型名称)~~

3)tolua.isnull
检查指定 Lua 值中保存的 C++ 对象是否已经被删除。

我们在将 C++ 对象保存到 Lua 值后。只要还有 Lua 代码在使用这些值,那么即使 C++ 对象已经被删除了,但 Lua 值仍然会存在。如果此时调用 Lua 值的方法就会出错。

因此可以用 tolua.isnull() 检查 Lua 值中的 C++ 对象是否已经被删除。

已删除 返回 true  没有被删除 返回 false

同时,还要注意一个问题,C/C++分配的内存在Lua中表现为一个userdata类型,且这个类型不受Lua垃圾回收机制的管理,所以有时成员变量已经移除了,但是这个类型没有回收

 if self.btnLayer then        self.btnLayer:removeFromParent()        self.btnLayer = nil    end    local btnLayer = createBtnLayer(btnInfo);    btnLayer:setLocalZOrder(Cur_Max_Z_Order);    btnLayer:setName("isHaveBtnLayer")    self.btnLayer = btnLayer    self:addChild(btnLayer);

其中createBtnLayer是一个Layer层,在Layer层中点击一个按钮是已经移除,可是self.btnLayer还是存在

这是在移除Layer层之前,把self.btnLayer = nil 这时才没有问题

0 0
原创粉丝点击