
首先 create 函数创建出对象,并autorelease将其放到内存池中,如果程序此时没有其他内容 会在 director的 循环中 本帧结束后 释放内存池,销毁对象。如果程序想继续使用对象,就需要 成对使用 retain 和 release来维护计数,使对象不会由于内存池的释放 而销毁。 但如图 我们将1 2 处代码注释掉 程序并不会出问题。原因是由于 addchild也会对 对象 进行 retain操作。使其不会因为内存池的清理而销毁。。。那我的问题是 此 对象 到底什么时候 销毁的??
有人能帮忙回答下么??
难道我问的太初级 么人愿意回答??
addChild引用计数加1,在removeChild的时候减1
什么时候 removechild的??
么找到。。帮忙看看。。。
不自己retain 默认是 autorelease 的. 然后Scene or Layer 释放时会处理它的children 释放之.
然后Scene or Layer 释放时会处理它的children 释放之 有么有代码???贴一下
楼主自己不会跟进引擎看吗
在addChild的时候,会将这个node加入父节点(layer或scene或其他node)的一个cocos2d::vector(_children)中,此时有retain操作
当父节点销毁的时候,这个_children析构会对其中的所有元素逐一调用release操作
PS:我用的3.1,所以可能一些命名和你的不一样
removechild的时候就会被销毁,create的时候会autorelease一次,计数器+1,addchild会再增加1,这时候是2,然后本次main循环执行结束会调用release一次,边回1,不会被销毁,removechild的时候-1,变成0,销毁
没有找到 removechld 调用的地方。
当父节点销毁的时候,这个_children析构会对其中的所有元素逐一调用release操作
没找到相应代码。。。
能跟到相关代码 就不会来论坛里请教了。。
这个还真不是着急的事. 推荐大家没事都翻翻 cocos2dx 的代码.
我最近的情况是 代码写完和自己想象的不一样. 呵呵.
copy paste 要不得. 花时间来看基础部分是有必要的.
看那个 CCNode.cpp 什么的
看了,么找到 node 是在哪儿 removechildren的。。。。
CCNode析构的时候,看是不是要析构子节点列表?
子节点列表析构的时候会调每个子节点的release方法,好好找找
没 找到。。。。。


