autoRelease

cocos2dx采用的是引用计数的方式来管理对象的持有和释放。

所谓引用计数就是说,每个对象都会有一个属性用来记录当前被几个地方引用了。在释放内存的时候会根据这个引用计数来确定是否要用delete操作符来释放这个对象占用的内存。

具体见CCObeject的默认构造函数,retain和release方法。

当一个对象被加到CCPoolManager里面以后这个对象的引用计数还是1(如果没有别的地方调用它的retain方法的话)。

在CCDirect的主循环方法mainLoop里面会调用CCPoolManager的pop方法,pop方法的作用其实只有一个,把当前持有的对象的引用释放,同时调用每个对象release方法(有可能被释放也有可能不释放,这取决于引用计数)。

pop方法被调用以后,之前一次通过autorelease方法加到CCPoolManager中的所有对象的死活CCPoolManager都不再管了(已经放弃对这些对象的引用了)。

使用cocos2dx内存管理机制的一个正确规则,retain或new操作符和release必须成对出现,哪里构造的时候调了某个对象的retain方法,那在他的析构的时候就一定要调该对象的release方法。

autoRelease主要是用来管理在方法作用域内通过new创建的对象的释放的,以达到这种类型的对象的内存释放能像普通定义的对象一样在方法调用一结束就进行释放。

原文地址:https://www.cnblogs.com/vincentDr/p/3666149.html