持续更新吧。 刚开始看了一些。
一,CCObject 提供引用计数
1,unsinged int m_uReference; //此为CCOBject的引用计数,初始化为 1; new CCObject();起引用计数为1。 这一点,与oc内存管理一致,不多写啦。
2, AutoRelease();
CCPoolManger::sharedPoolManger()->AddObject(this);//将this 放入 AutoReleasePool;
其中CCPoolManger是一个单例,管理多个CCAutoreleasePool;
CCPoolManger的成员变量 CCAutoreleasePool *m_pCurReleasePool 为当前生效的垃圾回收器;
CCPoolManger的成员变量 CCArray *m_pReleasePoolStack 可管理多个垃圾回收器
CCPoolManger 比较重要的方法:
void push(); 创建一个新的垃圾回收器,并且加入到动态数组 m_pReleasePoolStack;
void CCPoolManger::push()
{
CCAutoreleasePool *poll = new CCAutoreleasePool();
m_pCurReleasePool = poll; // 将新创建的poll赋给了 curReleasePool; 调用这个函数, 生效的ReleasePool会重新生成。
m_preleasePoolStack -> addObject(poll); //加入到动态数组。说明,pCurReleasePool 总是在动态数组 index==0 的位置;
poll->release();
}
void pop(); 清空m_pCurReleasePool, 并且把m_preleasePoolStack 中下一个 CCAutoReleasePool赋给 m_pCurReleasePool;
void CCPoolManger::pop()
{
if(!m_pCurReleasePoll) return;
int count = m_pReleasePoolStack->count();
if(count>1)
{
m_pReleasePoolStack->removeObjectAtIndex(count-1);
m_pCurReleasePool = (CCAutoReleasePoll*)m_pReleasePollStack->objectAtIndex(count-2);
}
}
还有一个方法,void addObject(CCObject* object); //此方法,是将 object 加入到 m_pCurReleasePoll中。
另一个重要的类: CCAutoReleasePool;
里面有保存CCObject的动态数组:m_pManagedObjectArray; 还应有对应的 addObject 与 RemoveObject方法