cocos工程里面“”invalid ''cobl” in fuction xxx原理与解决方案
在lua cocos工程里面,“”invalid ”cobl” in fuction xxx還是非常多的,究其原因使我們對lua 和 C&(引用)理解不深導致的。
現象
test.lua
–構造函數,創建test類時,自動創建一個node
function test:ctor() --在此創建一個節點,保存,但不馬上使用 self._node = cc.CSLoader:createNode("xx.csb") end function test:getNode()return self._node end return test–在result.lua文件中使用test創建的node,會報錯
result.lua local result = class("result") local classTest = import('test') function result:temp()local test = classTest:create()local node = test:getNode()--報錯,“”invalid ''cobl” in fuction xxxlocal child = node:getchildByName('child') end在此,node值并非為空,但是變成一個野指針,所以直接getchilaByName()會報錯。
為什么會這樣?
因為創建的node屬于cocos的node類,而node類的基類是Ref,是一個智能指針。我們在寫完self._node時離開函數棧,Ref的析構函數會自動對創建的node引用進行減1,引用變為0,也就成了空引用,此時節點會被釋放,變成了null或者野指針。
該怎么辦
兩種方法保持對該node的引用:、
1:自己直接解決,對該node的引用計數加1,使用retain()方法(node:retain()),但是必須在不用的時候進行node:release(),對node進行釋放。
2:把該節點丟給其他節點,找到一個父節點,使用addchild()方法將該node進行加入,此時該node的存在與消亡只與父節點有關,我們就不用擔心了。當我們不需要該節點的時候直接在父節點中將其remove掉就可以了。
總結
以上是生活随笔為你收集整理的cocos工程里面“”invalid ''cobl” in fuction xxx原理与解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lua 元表/元方法
- 下一篇: 好的lua代码风格