求问一个内存管理方面的问题。

![](file:///C:/Users/ShiJie/AppData/Roaming/Tencent/Users/253268499/QQ/WinTemp/RichOle/M6AXP(4T%7DDXL45MHK4Y0X%252.jpg)
首先 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方法,好好找找

找到。。。

没 找到。。。。。

我贴答案吧。。。。。。。。。。。。。。。。