userdata和lightuserdata
可以讓C返回一個句柄給Lua,而Lua可以將句柄再通過在C中註冊的方法傳回C
userdata:
userdata通過Lua的API(lua_newuserdata())分配內存,就像C裏的malloc()函數分配內存,
但不需要調用free()去釋放內存,該內存是由LUA的GC機制進行回收。
lightuserdata:
lightuserdata通過LUA的API(lua_pushlightuserdata())創建,返回一個指針。
當你需要把這個一個C的對象傳到LUA裏,並且需要自己管理這個指針時,lightuserdata就很適用了。
但是,這個C對象是需要自己管理,LUA並不會幫忙回收。
例如Cocos2d-x擁有自己的GC機制,使用lightuserdata把數據對象的指針傳到LUA裏。
區別:
1.userdata是由LUA的GC機制進行回收
2.lightuserdata需要自己管理分配和回收。