2012-06-14 38 views
0

我想在我的GameManager单例初始化中构建一些场景。ccscene弧和autorelease

场景是通过

- (id)init 
    { 
     self = [super init]; 
     if (self) {  // 'mainScene' is an autorelease object. 
     mainScene = [CCScene node]; 
... 
    } 

GameManger持有强引用mainScene创建:

@interface GameManager : NSObject 
{ 
    CCScene* mainScene; 
} 

但是,如果我尝试使用

[[CCDirector sharedDirector] pushScene:mainScene]; 

我拿到后推现场EXC_BAD_ACCESS

如果我创建并立即推动,那么一切正常。不应该使用默认的__strong引用来保持对象的分配?

在此先感谢您的帮助....

回答

0

想通了... [CCScene节点]是一个方便的工厂方法,做: [[[自我ALLOC] INIT]自动释放]。

但因为我使用弧......我不想说 - 我想

mainScene = [[CCScene alloc]init]; 

,而不是

mainScene = [CCScene node]; 
+1

也不让你使用ARC时有什么区别。 [CCScene节点]和[[CCScene alloc] init]的工作原理与ARC相同(尽管低级技术细节揭示了稍微不同的内存管理例程)。确保你没有陷入推动当前正在运行的场景的陷阱,这将会崩溃。 – LearnCocos2D

+0

我绝对没有推出一个正在运行的场景 - 并验证调用[[[[CCScene alloc] init] autorelease];崩溃和[[CCScene alloc] init]不.... – OptimisticMonkey