关于 Luabinding 内存管理机制的修改意见征集

感觉create这个东西十分不和谐, 每个类都要强制写一个create. 而不是用一个公共函数创建各自的实例.
比如应该加入一个ccNew(T, …)函数 替代create.

而且Node里做了太多事, 应该用组合的方式而不是继承.

1赞

关于组合的事情我们也在考虑,不过不会在近期的版本考虑,毕竟是比较大的改动,会带来不兼容性。

至于你说的create的解决方案说的是用模板来替换现在的方案吧。这样确实能够在写的时候比较节省,但是模板也有自身的局限性,比如难调试就是一个比较大的劣势。

1赞

在战斗逻辑里边,很多在闭包模块里边声明的c++变量, 在其它地方会反复复用, 这个时候常常需要retain咯 ,不然会导致代码冗余呢。还是不建议改 , 在目前lua内存自动回收处理的前提下 , 手动保留 和手动释放(lua层 和c++层) 我也认为是极好的。 以上纯素个人观点,如有不当请略过

我也不用retain。

目前的机制没有必要修改。

引用计数对于没有C++基础的程序员来说,很难理解。就算理解了,也很容易用漏。

与其教会他们适应C++的写法,不如就干脆不让他们了解什么是retain。

使用quick的人,大多数还是为了避免C++。

1赞

从来没用过retain路过,其实我觉得retain应该砍掉的(屏蔽掉~

简单点好。
1、C++创建的,C++自己负责释放;
2、Lua中create 出来的 autoRealse 的C++对象,立即 addTo CCLayer;
3、剩下的就是交给Lua GC自己管理吧。

1赞

是的。Lua 里根本不需要涉及 retain() 和 release() 调用。

如果是预先创建给稍后使用的对象,可以创建后立即加入场景,setVisible(false) 就行了。
这样当场景切换时,这些预创建的对象也会自动释放,非常方便。

1赞

建议用时创建, 立即addChild

1赞

目前用到的地方有两个
1.是将一个节点从一棵树上移动到另一颗树上的时候,
2.是将某些本应该销毁的对象缓存起来,方便下次用(可以省去new,这种情况只在某些特殊的地方用到)。

不知道是否是我的思路有问题,不过我也觉得目前的机制不要改。

能否C++对象释放时把对应的LUA对象指针置空,这样最多也就是个LUA错误而不会导致程序crash

1赞

现在就是这样做的。C++ 对象释放时,对应的 lua value 会清空。

1赞

感觉确实没有必要改, 我们项目几万行代码用到 retain/release 地方不超过 10 处, 当时写 c++ 的时候也没有怎么用过这个.

我们现在修改了quick的一个地方, 让 c++ 对象析构时抛出一个 destroy 事件, 感觉还是非常有用的. @dualface 廖大可以考虑一下.

http://blog.justbilt.com/2015/05/17/onDestroy/

2赞

这个很不错 ~

怎么突然想把14年的老贴挖坟出来

哈哈哈,一看就是老用户。:11:

我感觉这些东西都不是最重要的。现在是我想要更好的IDE。我现在是用sublime,一般不断点也能解决问题。但是我想要有Profiler工具,lua在这方面我找了一下没有一个可以用的。