问题
为什么obj调用retain之后不会被释放,我看源码是每帧都会执行 AutoreleasePool->Clear(),接着就是for循环,每个obj->release(),每帧都release为什么不会被释放?
https://forum.cocos.org/t/topic/113072
答案
- Node创建并加入自动释放池 rc=1
- retain后rc+1=2
- 下一帧:
- 清空自动释放池,rc-1=1,rc>0并不会被立即释放
- 自动释放池会被清空,所有池中节点执行release
- 每个节点加入自动释放池后,在下一帧就会被从池中移除了
- 每一帧都清除自动释放池,但是节点在池中只会存在一帧
- retain对象需要手动release才释放
自动管理的节点
- 比如addChild的rc+1=2
- 从池中被剔除时rc=1也不会被释放
- 场景退出时,会析构释放子节点容器,
- 每个子节点会被调用release
- 从而释放整个场景节点树
可以研究一下节点的生命周期