您当前的位置: 首页 >  游戏

鱼儿-1226

暂无认证

  • 0浏览

    0关注

    1100博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Cocos2d-x游戏开发实例详解7:对象释放时机

鱼儿-1226 发布时间:2020-08-31 16:01:16 ,浏览量:0

上两篇我们详细讲解了内存自动释放,接下来这篇写写自动对象的释放时机。

 

一个对象调用autorelease()函数后就被加入自动释放池,那么它什么时候被释放呢?

我从前面说过的游戏主循环开始跟进:

 

int CCApplication::run()
{
    if (applicationDidFinishLaunching()) 
    {
        [[CCDirectorCaller sharedDirectorCaller] startMainLoop];//主循环开始
    }
    return 0;
}

继续跟进startMainLoop函数

 

-(void) startMainLoop
{
        // CCDirector::setAnimationInterval() is called, we should invalidate it first
        [displayLink invalidate];
        displayLink = nil;
        // displayLink是CADisplayLink对象,target是自己,回调是coCaller
        displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(doCaller:)];//看这个doCaller回调
        [displayLink setFrameInterval: self.interval];//设置帧率
        [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];//添加到循环并启动
}

看doCaller回调,

 

void CCDisplayLinkDirector::mainLoop(void)
{
    if (m_bPurgeDirecotorInNextLoop)
    {
        m_bPurgeDirecotorInNextLoop = false;
        purgeDirector();
    }
    else if (! m_bInvalid)
     {
         drawScene();// draw the scene
     
         // release the objects
         CCPoolManager::sharedPoolManager()->pop();        
     }
}

好,一个循环完了。最后看到CCPoolManager::sharedPoolManager()->pop();就是用来释放对象的。

这里就释放对象了,有兴趣的同学可以自己跟进去看看到底是怎么释放的。

关注
打赏
1604459285
查看更多评论
立即登录/注册

微信扫码登录

0.0988s