1:tolua_super@H_403_2@
tolua_super存在于注册表中,其中记录了各种类型的父类,key是类型的table,value是也是个<v_key,v_value>的表,v_key是父类的名字,value是1。在判断类型的时候,这个非常有用。@H_403_2@
2:tolua_uBox@H_403_2@
在注册表中和每种类型的表中都存在这样一张表,注册表是在toluafix_open 中初始化的,而每种类型的tolua_uBox表示在该注册该类型的时候初始化的,请参考setBox函数,它要么是父类的tolua_uBox表,要么是重新创建一个新的弱值表,其中记录了ptr-->userdata,每当生成一个C++对象的时候,会生成一个lua层面的userdata,当下次压入时且类型是当前类型的子类,那么会去更新userdata的Metatable为子类表@H_403_2@
3:TolUA_REFID_PTR_MAPPing,TolUA_REFID_TYPE_MAPPing,TolUA_VALUE_ROOT@H_403_2@
这三个总是同时进行更新的,refID_ptr_map是ID-->ptr的映射表,refID_type_map是ID-->type的映射表,value_root_map是一个userdata-->ptr的映射表。在C++对象生成的时候,会对这三个表进行插入 *** 作,当移除C++对象的时候会对这三个表进行删除 *** 作。 这三个 表不是弱表@H_403_2@
@H_403_2@
4:userdata@H_403_2@
userdata是lua层面上的C++对象,它其实是个指针,指向的是真正C++对象的地址。userdata是在生成C++对象的时候压入到lua栈中的,详细 参考:tolua_pushusertype_internal,并且会把这个C++对象类型的表设置为userdata的元表,这个其实很有用。在判断lua传递数据到C++的userdata类型的时候,可以通过它的Metatable,再根据Metatable去注册表中拿到type,type就是它注册的C++类型。详细请参考 tolua_push.tolua_pushusertype_internal。@H_403_2@
总结以上是内存溢出为你收集整理的cocos lua 绑定感悟---各种表全部内容,希望文章能够帮你解决cocos lua 绑定感悟---各种表所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)