rt,我创建了两个场景a,b;a场景里利用create()函数在a.cpp里创建了一个全局变量x;发现:把a设为初始场景,从a通过replacescene切换到b没问题,但是反过来从b切换到a就报错了,由于全局变量是编译前创建的,考虑是不是因为b场景切换到a的同时释放了场景内存连同x一起释放掉了,又或者由于autorelease机制在第一个场景释放时release()掉了,特来向各位大神验证猜想~
a场景里利用create()函数在a.cpp里创建了一个全局变量x
这句怎么理解?
x是create出来的,什么类型?Ref的子类?
还是x只是一个简单类型,他在a的create()函数中创建出来?
x是一个create出来的继承Ref的类,即Playerx=Player::create();
然后今天发现如果使用Playerx=new Player;这种形式切换场景时就不会报错…
小白请大神赐教~
继承Ref的类create出来都是autoRelease的,事实上如果你create出来没有增加他的引用的话,程序运行到这一帧的最后就会给他释放掉了,想持有的话需要->retain()一下。
你看下create的实现。先是new了,然后再autorelease了。
去了解下autorelease干了些什么。
看下这篇文章:http://blog.csdn.net/jackystudio/article/details/13765639
具体是这一行
void DisplayLinkDirector::mainLoop()
{
if (_purgeDirectorInNextLoop)
{
_purgeDirectorInNextLoop = false;
purgeDirector();
}
else if (! _invalid)
{
drawScene();
// release the objects
PoolManager::getInstance()->getCurrentPool()->clear();//这一行
}
}
```
感谢大神们的指导~