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 这时才没有问题