penn-wang
一位老和尚,他身边聚拢着一帮虔诚的弟子。这一天,他嘱咐弟子每人去南山打一担柴回来。弟子们匆匆行至离山不远的河边,人人目瞪口呆。只见洪水从山上奔泻而下,无论如何也休想渡河打柴了。无功而返,弟子们都有些垂头丧气。唯独一个小和尚与师傅坦然相对。师傅问其故,小和尚从怀中掏出一个苹果,递给师傅说,过不了河,打不了柴,见河边有棵苹果树,我就顺手把树上唯一的一个苹果摘来了。后来,这位小和尚成了师傅的衣钵传人。

持续更新吧。 刚开始看了一些。

 

一,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方法

posted on 2014-01-07 18:54  penn-wang  阅读(201)  评论(0编辑  收藏  举报